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/22 17:22:25 UTC

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

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site f564c6197 -> f6cc92246


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    System.err.println("   -e             Use table/regionserver as regular expression");<a name="line.635"></a>
-<span clas

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 233f649..59dfe2f 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -3569,6 +3569,10 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html#AVG_KEY_LEN">AVG_KEY_LEN</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html" title="class in org.apache.hadoop.hbase.io.hfile">HFile.FileInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#AVG_STORE_FILE_AGE">AVG_STORE_FILE_AGE</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#AVG_STORE_FILE_AGE_DESC">AVG_STORE_FILE_AGE_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html#AVG_VALUE_LEN">AVG_VALUE_LEN</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html" title="class in org.apache.hadoop.hbase.io.hfile">HFile.FileInfo</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/AssignmentVerificationReport.html#avgDispersionNum">avgDispersionNum</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/AssignmentVerificationReport.html" title="class in org.apache.hadoop.hbase.master">AssignmentVerificationReport</a></dt>
@@ -3585,6 +3589,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/AssignmentVerificationReport.html#avgRegionsOnRS">avgRegionsOnRS</a></span> - Variable in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/AssignmentVerificationReport.html" title="class in org.apache.hadoop.hbase.master">AssignmentVerificationReport</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#avgStoreFileAge">avgStoreFileAge</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#avgStoreFileAge">avgStoreFileAge</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.html#avgValueLen">avgValueLen</a></span> - 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>
 <dd>
 <div class="block">Average value length read from file info</div>
@@ -6581,15 +6589,15 @@
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool"><span class="strong">Canary.Monitor</span></a> - Class in <a href="./org/apache/hadoop/hbase/tool/package-summary.html">org.apache.hadoop.hbase.tool</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.Monitor.html#Canary.Monitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService)">Canary.Monitor(Connection, String[], boolean, Canary.Sink, ExecutorService)</a></span> - Constructor for class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.Monitor.html#Canary.Monitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean)">Canary.Monitor(Connection, String[], boolean, Canary.Sink, ExecutorService, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html" title="class in org.apache.hadoop.hbase.tool"><span class="strong">Canary.RegionMonitor</span></a> - Class in <a href="./org/apache/hadoop/hbase/tool/package-summary.html">org.apache.hadoop.hbase.tool</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean,%20org.apache.hadoop.hbase.TableName)">Canary.RegionMonitor(Connection, String[], boolean, Canary.Sink, ExecutorService, boolean, TableName)</a></span> - Constructor for class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.RegionMonitor</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean,%20org.apache.hadoop.hbase.TableName,%20boolean)">Canary.RegionMonitor(Connection, String[], boolean, Canary.Sink, ExecutorService, boolean, TableName, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.RegionMonitor</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html" title="class in org.apache.hadoop.hbase.tool"><span class="strong">Canary.RegionServerMonitor</span></a> - Class in <a href="./org/apache/hadoop/hbase/tool/package-summary.html">org.apache.hadoop.hbase.tool</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#Canary.RegionServerMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.ExtendedSink,%20java.util.concurrent.ExecutorService,%20boolean)">Canary.RegionServerMonitor(Connection, String[], boolean, Canary.ExtendedSink, ExecutorService, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.RegionServerMonitor</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#Canary.RegionServerMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.ExtendedSink,%20java.util.concurrent.ExecutorService,%20boolean,%20boolean)">Canary.RegionServerMonitor(Connection, String[], boolean, Canary.ExtendedSink, ExecutorService, boolean, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.RegionServerMonitor</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html" title="class in org.apache.hadoop.hbase.tool"><span class="strong">Canary.RegionServerStdOutSink</span></a> - Class in <a href="./org/apache/hadoop/hbase/tool/package-summary.html">org.apache.hadoop.hbase.tool</a></dt>
 <dd>&nbsp;</dd>
@@ -14553,6 +14561,8 @@
 <dd>
 <div class="block">Creates a directory for a filesystem and configuration object.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#createdTimestamp">createdTimestamp</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/KeyValue.html#createEmptyByteArray(int,%20int,%20int,%20long,%20org.apache.hadoop.hbase.KeyValue.Type,%20int,%20int)">createEmptyByteArray(int, int, int, long, KeyValue.Type, int, int)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/KeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue</a></dt>
 <dd>
 <div class="block">Create an empty byte[] representing a KeyValue
@@ -14981,6 +14991,11 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/MasterRpcServices.html#createNamespace(com.google.protobuf.RpcController,%20org.apache.hadoop.hbase.protobuf.generated.MasterProtos.CreateNamespaceRequest)">createNamespace(RpcController, MasterProtos.CreateNamespaceRequest)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/MasterRpcServices.html" title="class in org.apache.hadoop.hbase.master">MasterRpcServices</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#createNamespaceAndTable(org.apache.hadoop.hbase.client.Admin)">createNamespaceAndTable(Admin)</a></span> - Static method in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>
+<div class="block">Invokes Admin#createNamespace and Admin#createTable to create a namespace
+ with a table that has one column-family.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Admin.html#createNamespaceAsync(org.apache.hadoop.hbase.NamespaceDescriptor)">createNamespaceAsync(NamespaceDescriptor)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
 <dd>
 <div class="block">Create a new namespace</div>
@@ -18192,6 +18207,11 @@
 <dd>
 <div class="block">Delete the acl notify node of namespace</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#deleteNamespaceAndTable(org.apache.hadoop.hbase.client.Admin)">deleteNamespaceAndTable(Admin)</a></span> - Static method in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>
+<div class="block">Invokes Admin#disableTable, Admin#deleteTable, and Admin#deleteNamespace to
+ disable/delete Table and delete Namespace.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Admin.html#deleteNamespaceAsync(java.lang.String)">deleteNamespaceAsync(String)</a></span> - Method in interface org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a></dt>
 <dd>
 <div class="block">Delete an existing namespace.</div>
@@ -18296,6 +18316,10 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.CompactionOrFlushMergeCopy.html#deleteResults(java.util.Collection)">deleteResults(Collection&lt;StoreFile&gt;)</a></span> - Method 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/hbase/archetypes/exemplars/client/HelloHBase.html#deleteRow(org.apache.hadoop.hbase.client.Table)">deleteRow(Table)</a></span> - Static method in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>
+<div class="block">Invokes Table#delete to delete test data (i.e.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html#deletes">deletes</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">ScanQueryMatcher</a></dt>
 <dd>
 <div class="block">Keeps track of deletes</div>
@@ -22266,6 +22290,8 @@
 <dd>
 <div class="block">Singleton for failed operations.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.html#FAILURE_EXIT_CODE">FAILURE_EXIT_CODE</a></span> - Static variable in class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.html" title="class in org.apache.hadoop.hbase.tool">Canary</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/TimeLimitedRpcController.html#failureCb">failureCb</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/TimeLimitedRpcController.html" title="class in org.apache.hadoop.hbase.ipc">TimeLimitedRpcController</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/exceptions/PreemptiveFastFailException.html#failureCount">failureCount</a></span> - Variable in exception org.apache.hadoop.hbase.exceptions.<a href="./org/apache/hadoop/hbase/exceptions/PreemptiveFastFailException.html" title="class in org.apache.hadoop.hbase.exceptions">PreemptiveFastFailException</a></dt>
@@ -23269,6 +23295,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html#FilterWrapper.FilterRowRetCode()">FilterWrapper.FilterRowRetCode()</a></span> - Constructor for enum org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter">FilterWrapper.FilterRowRetCode</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.Monitor.html#finalCheckForErrors()">finalCheckForErrors()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/ConnectionImplementation.html#finalize()">finalize()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/ConnectionImplementation.html" title="class in org.apache.hadoop.hbase.client">ConnectionImplementation</a></dt>
 <dd>
 <div class="block">Close the connection for good.</div>
@@ -25647,6 +25675,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/HBaseAdmin.html#getAlterStatus(byte[])">getAlterStatus(byte[])</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/HBaseAdmin.html" title="class in org.apache.hadoop.hbase.client">HBaseAdmin</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#getAndPrintRowContents(org.apache.hadoop.hbase.client.Table)">getAndPrintRowContents(Table)</a></span> - Static method in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>
+<div class="block">Invokes Table#get and prints out the contents of the retrieved row.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/wal/WALEdit.html#getAndRemoveScopes()">getAndRemoveScopes()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="./org/apache/hadoop/hbase/regionserver/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALEdit</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#getAndReset()">getAndReset()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.AtomicAverageCounter</a></dt>
@@ -25849,6 +25881,18 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/byterange/ByteRangeSet.html#getAvgSize()">getAvgSize()</a></span> - Method in class org.apache.hadoop.hbase.util.byterange.<a href="./org/apache/hadoop/hbase/util/byterange/ByteRangeSet.html" title="class in org.apache.hadoop.hbase.util.byterange">ByteRangeSet</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HStore.html#getAvgStoreFileAge()">getAvgStoreFileAge()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getAvgStoreFileAge()">getAvgStoreFileAge()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getAvgStoreFileAge()">getAvgStoreFileAge()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getAvgStoreFileAge()">getAvgStoreFileAge()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getAvgStoreFileAge()">getAvgStoreFileAge()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/Store.html#getAvgStoreFileAge()">getAvgStoreFileAge()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/fs/HFileSystem.html#getBackingFs()">getBackingFs()</a></span> - Method in class org.apache.hadoop.hbase.fs.<a href="./org/apache/hadoop/hbase/fs/HFileSystem.html" title="class in org.apache.hadoop.hbase.fs">HFileSystem</a></dt>
 <dd>
 <div class="block">Returns the underlying filesystem</div>
@@ -27613,6 +27657,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/ClientAsyncPrefetchScanner.html#getCountThreshold()">getCountThreshold()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/ClientAsyncPrefetchScanner.html" title="class in org.apache.hadoop.hbase.client">ClientAsyncPrefetchScanner</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#getCreatedTimestamp()">getCreatedTimestamp()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileBlockIndex.BlockIndexChunk.html#getCumulativeNumKV(int)">getCumulativeNumKV(int)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileBlockIndex.BlockIndexChunk.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlockIndex.BlockIndexChunk</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html#getCurBlockCacheSize()">getCurBlockCacheSize()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HeapMemoryManager.TunerContext.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.TunerContext</a></dt>
@@ -31116,6 +31162,18 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StripeStoreConfig.html#getMaxSplitImbalance()">getMaxSplitImbalance()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StripeStoreConfig.html" title="class in org.apache.hadoop.hbase.regionserver">StripeStoreConfig</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HStore.html#getMaxStoreFileAge()">getMaxStoreFileAge()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMaxStoreFileAge()">getMaxStoreFileAge()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMaxStoreFileAge()">getMaxStoreFileAge()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getMaxStoreFileAge()">getMaxStoreFileAge()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getMaxStoreFileAge()">getMaxStoreFileAge()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/Store.html#getMaxStoreFileAge()">getMaxStoreFileAge()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegion.html#getMaxStoreSeqId()">getMaxStoreSeqId()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/Region.html#getMaxStoreSeqId()">getMaxStoreSeqId()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></dt>
@@ -31556,6 +31614,18 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html#getMinProcId()">getMinProcId()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="./org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.WalProcedureMap.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">ProcedureWALFormatReader.WalProcedureMap</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HStore.html#getMinStoreFileAge()">getMinStoreFileAge()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMinStoreFileAge()">getMinStoreFileAge()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMinStoreFileAge()">getMinStoreFileAge()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getMinStoreFileAge()">getMinStoreFileAge()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getMinStoreFileAge()">getMinStoreFileAge()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/Store.html#getMinStoreFileAge()">getMinStoreFileAge()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeBlockMeta.html#getMinTimestamp()">getMinTimestamp()</a></span> - Method 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/regionserver/Segment.html#getMinTimestamp()">getMinTimestamp()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/Segment.html" title="class in org.apache.hadoop.hbase.regionserver">Segment</a></dt>
@@ -32393,6 +32463,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getNumFilesCompacted()">getNumFilesCompacted()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HStore.html#getNumHFiles()">getNumHFiles()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/Store.html#getNumHFiles()">getNumHFiles()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeBlockMeta.html#getNumKeyValueBytes()">getNumKeyValueBytes()</a></span> - Method 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/codec/prefixtree/encode/tokenize/TokenizerNode.html#getNumLeafNodesIncludingThisNode()">getNumLeafNodesIncludingThisNode()</a></span> - Method in class org.apache.hadoop.hbase.codec.prefixtree.encode.tokenize.<a href="./org/apache/hadoop/hbase/codec/prefixtree/encode/tokenize/TokenizerNode.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.encode.tokenize">TokenizerNode</a></dt>
@@ -32458,6 +32532,18 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CompoundBloomFilter.html#getNumQueriesForTesting(int)">getNumQueriesForTesting(int)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CompoundBloomFilter.html" title="class in org.apache.hadoop.hbase.io.hfile">CompoundBloomFilter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HStore.html#getNumReferenceFiles()">getNumReferenceFiles()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumReferenceFiles()">getNumReferenceFiles()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getNumReferenceFiles()">getNumReferenceFiles()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumReferenceFiles()">getNumReferenceFiles()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getNumReferenceFiles()">getNumReferenceFiles()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/Store.html#getNumReferenceFiles()">getNumReferenceFiles()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#getNumRegions(int)">getNumRegions(int)</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/ClusterLoadState.html#getNumRegions()">getNumRegions()</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/ClusterLoadState.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterLoadState</a></dt>
@@ -33809,6 +33895,10 @@
 <dd>
 <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>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.Sink.html#getReadFailureCount()">getReadFailureCount()</a></span> - Method in interface org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#getReadFailureCount()">getReadFailureCount()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.StdOutSink.html" title="class in org.apache.hadoop.hbase.tool">Canary.StdOutSink</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegion.html#getReadPoint(org.apache.hadoop.hbase.client.IsolationLevel)">getReadPoint(IsolationLevel)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegion.html#getReadpoint(org.apache.hadoop.hbase.client.IsolationLevel)">getReadpoint(IsolationLevel)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></dt>
@@ -39102,6 +39192,10 @@
 <dd>
 <div class="block">Use it to complete mvcc transaction.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.Sink.html#getWriteFailureCount()">getWriteFailureCount()</a></span> - Method in interface org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#getWriteFailureCount()">getWriteFailureCount()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.StdOutSink.html" title="class in org.apache.hadoop.hbase.tool">Canary.StdOutSink</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HRegionServer.html#getWriteLock()">getWriteLock()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html#getWriteNumber()">getWriteNumber()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a></dt>
@@ -41638,6 +41732,13 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.AvlTree.html#height(org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler.Queue)">height(MasterProcedureScheduler.Queue&lt;T&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.master.procedure.<a href="./org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.AvlTree.html" title="class in org.apache.hadoop.hbase.master.procedure">MasterProcedureScheduler.AvlTree</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client"><span class="strong">HelloHBase</span></a> - Class in <a href="./org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a></dt>
+<dd>
+<div class="block">Successful running of this application requires access to an active instance
+ of HBase.</div>
+</dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#HelloHBase()">HelloHBase()</a></span> - Constructor for class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/Threads.PrintThreadInfoLazyHolder.html#HELPER">HELPER</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/Threads.PrintThreadInfoLazyHolder.html" title="class in org.apache.hadoop.hbase.util">Threads.PrintThreadInfoLazyHolder</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/metrics2/lib/DynamicMetricsRegistry.html#helper">helper</a></span> - Variable in class org.apache.hadoop.metrics2.lib.<a href="./org/apache/hadoop/metrics2/lib/DynamicMetricsRegistry.html" title="class in org.apache.hadoop.metrics2.lib">DynamicMetricsRegistry</a></dt>
@@ -43458,6 +43559,10 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/MetricsConnection.RunnerStats.html#incrDelayRunners()">incrDelayRunners()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/MetricsConnection.RunnerStats.html" title="class in org.apache.hadoop.hbase.client">MetricsConnection.RunnerStats</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.Sink.html#incReadFailureCount()">incReadFailureCount()</a></span> - Method in interface org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#incReadFailureCount()">incReadFailureCount()</a></span> - Method in class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.StdOutSink.html" title="class in org.apache.hadoop.hbase.tool">Canary.StdOutSink</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">IncreasingToUpperBoundRegionSplitPolicy</span></a> - Class in <a href="./org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
 <dd>
 <div class="block">Split size is the number of regions that are on this server that all are
@@ -46420,6 +46525,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/Bytes.html#isHexDigit(char)">isHexDigit(char)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/Bytes.html" title="class in org.apache.hadoop.hbase.util">Bytes</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreFile.html#isHFile()">isHFile()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#isHFile(org.apache.hadoop.fs.Path)">isHFile(Path)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#isHFile(java.lang.String)">isHFile(String)</a></span> - Static method in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a></dt>
@@ -52418,6 +52525,8 @@
 <dd>
 <div class="block">Run the tool.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#main(java.lang.String[])">main(String[])</a></span> - Static method in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/CompactionTool.CompactionMapper.html#major">major</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/CompactionTool.CompactionMapper.html" title="class in org.apache.hadoop.hbase.regionserver">CompactionTool.CompactionMapper</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAJOR_COMPACTED_CELLS">MAJOR_COMPACTED_CELLS</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
@@ -53602,6 +53711,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.html#MAX_STEPS_KEY">MAX_STEPS_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">StochasticLoadBalancer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAX_STORE_FILE_AGE">MAX_STORE_FILE_AGE</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAX_STORE_FILE_AGE_DESC">MAX_STORE_FILE_AGE_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#MAX_SYNC_FAILURE_ROLL_CONF_KEY">MAX_SYNC_FAILURE_ROLL_CONF_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="./org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/Tag.html#MAX_TAG_LENGTH">MAX_TAG_LENGTH</a></span> - Static variable in interface org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/Tag.html" title="interface in org.apache.hadoop.hbase">Tag</a></dt>
@@ -53864,6 +53977,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.html#maxSteps">maxSteps</a></span> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">StochasticLoadBalancer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#maxStoreFileAge">maxStoreFileAge</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#maxStoreFileAge">maxStoreFileAge</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html#maxSyncFailureRoll">maxSyncFailureRoll</a></span> - Variable in class org.apache.hadoop.hbase.procedure2.store.wal.<a href="./org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.html" title="class in org.apache.hadoop.hbase.procedure2.store.wal">WALProcedureStore</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/encode/PrefixTreeEncoder.html#maxTagLength">maxTagLength</a></span> - Variable in class org.apache.hadoop.hbase.codec.prefixtree.encode.<a href="./org/apache/hadoop/hbase/codec/prefixtree/encode/PrefixTreeEncoder.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.encode">PrefixTreeEncoder</a></dt>
@@ -55524,6 +55641,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.html#MIN_STEP_KEY">MIN_STEP_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.html" title="class in org.apache.hadoop.hbase.regionserver">DefaultHeapMemoryTuner</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MIN_STORE_FILE_AGE">MIN_STORE_FILE_AGE</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MIN_STORE_FILE_AGE_DESC">MIN_STORE_FILE_AGE_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.html#MIN_V2_MINOR_VERSION_WITH_PB">MIN_V2_MINOR_VERSION_WITH_PB</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>
 <dd>
 <div class="block">We can read files whose major version is v2 IFF their minor version is at least 3.</div>
@@ -55637,6 +55758,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/TimeRange.html#minStamp">minStamp</a></span> - Variable in class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#minStoreFileAge">minStoreFileAge</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#minStoreFileAge">minStoreFileAge</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/PrefixTreeBlockMeta.html#minTimestamp">minTimestamp</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/filter/TimestampsFilter.html#minTimeStamp">minTimeStamp</a></span> - Variable in class org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/TimestampsFilter.html" title="class in org.apache.hadoop.hbase.filter">TimestampsFilter</a></dt>
@@ -56766,6 +56891,18 @@
 <dd>
 <div class="block">MX Bean for RegionServerInfo</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_COLUMN_FAMILY_NAME">MY_COLUMN_FAMILY_NAME</a></span> - Static variable in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_FIRST_COLUMN_QUALIFIER">MY_FIRST_COLUMN_QUALIFIER</a></span> - Static variable in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_NAMESPACE_NAME">MY_NAMESPACE_NAME</a></span> - Static variable in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_ROW_ID">MY_ROW_ID</a></span> - Static variable in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_SECOND_COLUMN_QUALIFIER">MY_SECOND_COLUMN_QUALIFIER</a></span> - Static variable in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_TABLE_NAME">MY_TABLE_NAME</a></span> - Static variable in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/ScannerCallable.html#myAddress">myAddress</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/ScannerCallable.html" title="class in org.apache.hadoop.hbase.client">ScannerCallable</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/VersionInfo.html#myPackage">myPackage</a></span> - Static variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/VersionInfo.html" title="class in org.apache.hadoop.hbase.util">VersionInfo</a></dt>
@@ -56963,6 +57100,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/NamespaceExistException.html#NamespaceExistException(java.lang.String)">NamespaceExistException(String)</a></span> - Constructor for exception org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/NamespaceExistException.html" title="class in org.apache.hadoop.hbase">NamespaceExistException</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#namespaceExists(org.apache.hadoop.hbase.client.Admin,%20java.lang.String)">namespaceExists(Admin, String)</a></span> - Static method in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>
+<div class="block">Checks to see whether a namespace exists.</div>
+</dd>
 <dt><a href="./org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.html" title="class in org.apache.hadoop.hbase.wal"><span class="strong">NamespaceGroupingStrategy</span></a> - Class in <a href="./org/apache/hadoop/hbase/wal/package-summary.html">org.apache.hadoop.hbase.wal</a></dt>
 <dd>
 <div class="block">A WAL grouping strategy based on namespace.</div>
@@ -58418,6 +58559,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.html#NUM_PERIODS_TO_IGNORE">NUM_PERIODS_TO_IGNORE</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.html" title="class in org.apache.hadoop.hbase.regionserver">DefaultHeapMemoryTuner</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#NUM_REFERENCE_FILES">NUM_REFERENCE_FILES</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#NUM_REFERENCE_FILES_DESC">NUM_REFERENCE_FILES_DESC</a></span> - Static variable in interface org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/wal/BoundedGroupingStrategy.html#NUM_REGION_GROUPS">NUM_REGION_GROUPS</a></span> - Static variable in class org.apache.hadoop.hbase.wal.<a href="./org/apache/hadoop/hbase/wal/BoundedGroupingStrategy.html" title="class in org.apache.hadoop.hbase.wal">BoundedGroupingStrategy</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/MetricsMasterSource.html#NUM_REGION_SERVERS_NAME">NUM_REGION_SERVERS_NAME</a></span> - Static variable in interface org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/MetricsMasterSource.html" title="interface in org.apache.hadoop.hbase.master">MetricsMasterSource</a></dt>
@@ -58578,6 +58723,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RWQueueRpcExecutor.html#numReadQueues">numReadQueues</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RWQueueRpcExecutor.html" title="class in org.apache.hadoop.hbase.ipc">RWQueueRpcExecutor</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#numReferenceFiles">numReferenceFiles</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#numReferenceFiles">numReferenceFiles</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapperImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.html#numRegionLoadsToRemember">numRegionLoadsToRemember</a></span> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">StochasticLoadBalancer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html#numRegions">numRegions</a></span> - Variable in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.html" title="class in org.apache.hadoop.hbase.master.balancer">BaseLoadBalancer.Cluster</a></dt>
@@ -59808,6 +59957,12 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/metrics2/util/package-summary.html">org.apache.hadoop.metrics2.util</a> - package org.apache.hadoop.metrics2.util</dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a> - package org.apache.hbase.archetypes.exemplars.client</dt>
+<dd>
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/Action.html#originalIndex">originalIndex</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/Action.html" title="class in org.apache.hadoop.hbase.client">Action</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/HFileLink.html#originPath">originPath</a></span> - Variable in class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/HFileLink.html" title="class in org.apache.hadoop.hbase.io">HFileLink</a></dt>
@@ -65934,6 +66089,11 @@ service.</div>
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/RegionStates.html#putRegionState(org.apache.hadoop.hbase.master.RegionState)">putRegionState(RegionState)</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/RegionStates.html" title="class in org.apache.hadoop.hbase.master">RegionStates</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#putRowToTable(org.apache.hadoop.hbase.client.Table)">putRowToTable(Table)</a></span> - Static method in class org.apache.hbase.archetypes.exemplars.client.<a href="./org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></dt>
+<dd>
+<div class="block">Invokes Table#put to store a row (with two new columns created 'on the
+ fly') into the table.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/thrift2/ThriftUtilities.html#putsFromThrift(java.util.List)">putsFromThrift(List&lt;TPut&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.thrift2.<a href="./org/apache/hadoop/hbase/thrift2/ThriftUtilities.html" title="class in org.apache.hadoop.hbase.thrift2">ThriftUtilities</a></dt>
 <dd>
 <div class="block">Converts multiple <code>TPut</code>s (Thrift) into a list of <a href="./org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client"><code>Put</code></a>s (HBase).</div>
@@ -67044,6 +67204,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/RegionMover.html#readExcludes(java.lang.String)">readExcludes(String)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/RegionMover.html" title="class in org.apache.hadoop.hbase.util">RegionMover</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#readFailureCount">readFailureCount</a></span> - Variable in class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.StdOutSink.html" title="class in org.apache.hadoop.hbase.tool">Canary.StdOutSink</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterWriter.MetaWriter.html#readFields(java.io.DataInput)">readFields(DataInput)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CompoundBloomFilterWriter.MetaWriter.html" title="class in org.apache.hadoop.hbase.io.hfile">CompoundBloomFilterWriter.MetaWriter</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/ImmutableBytesWritable.html#readFields(java.io.DataInput)">readFields(DataInput)</a></span> - Method in class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a></dt>
@@ -88420,6 +88582,10 @@ service.</div>
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/MunkresAssignment.html#transposed">transposed</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/MunkresAssignment.html" title="class in org.apache.hadoop.hbase.util">MunkresAssignment</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.Monitor.html#treatFailureAsError">treatFailureAsError</a></span> - Variable in class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.html#treatFailureAsError">treatFailureAsError</a></span> - Variable in class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.html" title="class in org.apache.hadoop.hbase.tool">Canary</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/classification/tools/RootDocProcessor.html#treatUnannotatedClassesAsPrivate">treatUnannotatedClassesAsPrivate</a></span> - Static variable in class org.apache.hadoop.hbase.classification.tools.<a href="./org/apache/hadoop/hbase/classification/tools/RootDocProcessor.html" title="class in org.apache.hadoop.hbase.classification.tools">RootDocProcessor</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/codec/prefixtree/encode/tokenize/Tokenizer.html#treeDepth">treeDepth</a></span> - Variable in class org.apache.hadoop.hbase.codec.prefixtree.encode.tokenize.<a href="./org/apache/hadoop/hbase/codec/prefixtree/encode/tokenize/Tokenizer.html" title="class in org.apache.hadoop.hbase.codec.prefixtree.encode.tokenize">Tokenizer</a></dt>
@@ -93747,6 +93913,8 @@ the order they are declared.</div>
 <dd>
 <div class="block">Set in a way visible to multiple threads; e.g.</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#writeFailureCount">writeFailureCount</a></span> - Variable in class org.apache.hadoop.hbase.tool.<a href="./org/apache/hadoop/hbase/tool/Canary.StdOutSink.html" title="class in org.apache.hadoop.hbase.tool">Canary.StdOutSink</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/CellUtil.html#writeFamily(java.io.DataOutputStream,%20org.apache.hadoop.hbase.Cell,%20byte)">writeFamily(DataOutputStream, Cell, byte)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/CellUtil.html" title="class in org.apache.hadoop.hbase">CellUtil</a></dt>
 <dd>
 <div class="block">Writes the family from the given cell to the output stream</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index 6553f59..17e7086 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -247,6 +247,14 @@ service.</div>
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.wal">org.apache.hadoop.hbase.wal</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hbase.archetypes.exemplars.client">org.apache.hbase.archetypes.exemplars.client</a></td>
+<td class="colLast">
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -7773,13 +7781,14 @@ service.</div>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean,%20org.apache.hadoop.hbase.TableName)">Canary.RegionMonitor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean,%20org.apache.hadoop.hbase.TableName,%20boolean)">Canary.RegionMonitor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                         <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;monitorTargets,
                                         boolean&nbsp;useRegExp,
                                         <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
                                         <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
                                         boolean&nbsp;writeSniffing,
-                                        <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;writeTableName)</code>&nbsp;</td>
+                                        <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;writeTableName,
+                                        boolean&nbsp;treatFailureAsError)</code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
@@ -8385,6 +8394,24 @@ service.</div>
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hbase.archetypes.exemplars.client">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> in <a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a> declared as <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
+<td class="colLast"><span class="strong">HelloHBase.</span><code><strong><a href="../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_TABLE_NAME">MY_TABLE_NAME</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 9ba1a10..6117018 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
@@ -80,12 +80,12 @@
 </ul>
 <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/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/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>
-<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/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>
+<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/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>
 </ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/client/class-use/Admin.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Admin.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Admin.html
index a8b202a..cc64dcc 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Admin.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Admin.html
@@ -116,6 +116,14 @@ service.</div>
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hbase.archetypes.exemplars.client">org.apache.hbase.archetypes.exemplars.client</a></td>
+<td class="colLast">
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -588,6 +596,41 @@ service.</div>
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hbase.archetypes.exemplars.client">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> in <a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</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>(package private) static void</code></td>
+<td class="colLast"><span class="strong">HelloHBase.</span><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#createNamespaceAndTable(org.apache.hadoop.hbase.client.Admin)">createNamespaceAndTable</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin)</code>
+<div class="block">Invokes Admin#createNamespace and Admin#createTable to create a namespace
+ with a table that has one column-family.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static void</code></td>
+<td class="colLast"><span class="strong">HelloHBase.</span><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#deleteNamespaceAndTable(org.apache.hadoop.hbase.client.Admin)">deleteNamespaceAndTable</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin)</code>
+<div class="block">Invokes Admin#disableTable, Admin#deleteTable, and Admin#deleteNamespace to
+ disable/delete Table and delete Namespace.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static boolean</code></td>
+<td class="colLast"><span class="strong">HelloHBase.</span><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#namespaceExists(org.apache.hadoop.hbase.client.Admin,%20java.lang.String)">namespaceExists</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
+                              <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;namespaceName)</code>
+<div class="block">Checks to see whether a namespace exists.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 </li>
 </ul>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-summary.html b/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-summary.html
new file mode 100644
index 0000000..b8d8154
--- /dev/null
+++ b/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-summary.html
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>org.apache.hbase.archetypes.exemplars.client (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="org.apache.hbase.archetypes.exemplars.client (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-use.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/metrics2/util/package-summary.html">Prev Package</a></li>
+<li>Next Package</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Package" class="title">Package&nbsp;org.apache.hbase.archetypes.exemplars.client</h1>
+<div class="docSummary">
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</div>
+<p>See:&nbsp;<a href="#package_description">Description</a></p>
+</div>
+<div class="contentContainer">
+<ul class="blockList">
+<li class="blockList">
+<table class="packageSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
+<caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Class</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></td>
+<td class="colLast">
+<div class="block">Successful running of this application requires access to an active instance
+ of HBase.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+<a name="package_description">
+<!--   -->
+</a>
+<h2 title="Package org.apache.hbase.archetypes.exemplars.client Description">Package org.apache.hbase.archetypes.exemplars.client Description</h2>
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-use.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/metrics2/util/package-summary.html">Prev Package</a></li>
+<li>Next Package</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-tree.html b/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-tree.html
new file mode 100644
index 0000000..d78486c
--- /dev/null
+++ b/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-tree.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>org.apache.hbase.archetypes.exemplars.client Class Hierarchy (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="org.apache.hbase.archetypes.exemplars.client Class Hierarchy (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/metrics2/util/package-tree.html">Prev</a></li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Hierarchy For Package org.apache.hbase.archetypes.exemplars.client</h1>
+<span class="strong">Package Hierarchies:</span>
+<ul class="horizontal">
+<li><a href="../../../../../../overview-tree.html">All Packages</a></li>
+</ul>
+</div>
+<div class="contentContainer">
+<h2 title="Class Hierarchy">Class Hierarchy</h2>
+<ul>
+<li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="strong">Object</span></a>
+<ul>
+<li type="circle">org.apache.hbase.archetypes.exemplars.client.<a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client"><span class="strong">HelloHBase</span></a></li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/metrics2/util/package-tree.html">Prev</a></li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-use.html b/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-use.html
new file mode 100644
index 0000000..3746877
--- /dev/null
+++ b/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-use.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Package org.apache.hbase.archetypes.exemplars.client (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Package org.apache.hbase.archetypes.exemplars.client (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-use.html" target="_top">Frames</a></li>
+<li><a href="package-use.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Uses of Package org.apache.hbase.archetypes.exemplars.client" class="title">Uses of Package<br>org.apache.hbase.archetypes.exemplars.client</h1>
+</div>
+<div class="contentContainer">No usage of org.apache.hbase.archetypes.exemplars.client</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-use.html" target="_top">Frames</a></li>
+<li><a href="package-use.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/overview-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-frame.html b/devapidocs/overview-frame.html
index a0a7652..a262990 100644
--- a/devapidocs/overview-frame.html
+++ b/devapidocs/overview-frame.html
@@ -126,6 +126,7 @@
 <li><a href="org/apache/hadoop/metrics2/impl/package-frame.html" target="packageFrame">org.apache.hadoop.metrics2.impl</a></li>
 <li><a href="org/apache/hadoop/metrics2/lib/package-frame.html" target="packageFrame">org.apache.hadoop.metrics2.lib</a></li>
 <li><a href="org/apache/hadoop/metrics2/util/package-frame.html" target="packageFrame">org.apache.hadoop.metrics2.util</a></li>
+<li><a href="org/apache/hbase/archetypes/exemplars/client/package-frame.html" target="packageFrame">org.apache.hbase.archetypes.exemplars.client</a></li>
 </ul>
 </div>
 <p>&nbsp;</p>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/overview-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-summary.html b/devapidocs/overview-summary.html
index ef2ecd0..1934240 100644
--- a/devapidocs/overview-summary.html
+++ b/devapidocs/overview-summary.html
@@ -587,6 +587,14 @@ service.</div>
 <td class="colFirst"><a href="org/apache/hadoop/metrics2/util/package-summary.html">org.apache.hadoop.metrics2.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a></td>
+<td class="colLast">
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index 95f8232..cf1db1f 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -179,7 +179,8 @@
 <li><a href="org/apache/hadoop/metrics2/package-tree.html">org.apache.hadoop.metrics2</a>, </li>
 <li><a href="org/apache/hadoop/metrics2/impl/package-tree.html">org.apache.hadoop.metrics2.impl</a>, </li>
 <li><a href="org/apache/hadoop/metrics2/lib/package-tree.html">org.apache.hadoop.metrics2.lib</a>, </li>
-<li><a href="org/apache/hadoop/metrics2/util/package-tree.html">org.apache.hadoop.metrics2.util</a></li>
+<li><a href="org/apache/hadoop/metrics2/util/package-tree.html">org.apache.hadoop.metrics2.util</a>, </li>
+<li><a href="org/apache/hbase/archetypes/exemplars/client/package-tree.html">org.apache.hbase.archetypes.exemplars.client</a></li>
 </ul>
 </div>
 <div class="contentContainer">
@@ -1448,6 +1449,7 @@
 <li type="circle">org.apache.hadoop.hbase.io.util.<a href="org/apache/hadoop/hbase/io/util/HeapMemorySizeUtil.html" title="class in org.apache.hadoop.hbase.io.util"><span class="strong">HeapMemorySizeUtil</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">HeapMemStoreLAB</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreLAB.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreLAB</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.Chunk.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="strong">HeapMemStoreLAB.Chunk</span></a></li>
+<li type="circle">org.apache.hbase.archetypes.exemplars.client.<a href="org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client"><span class="strong">HelloHBase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFile.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">HFile</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">HFile.FileInfo</span></a> (implements java.util.<a href="http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html?is-external=true" title="class or interface in java.util">SortedMap</a>&lt;K,V&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFile.WriterFactory.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="strong">HFile.WriterFactory</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/package-list
----------------------------------------------------------------------
diff --git a/devapidocs/package-list b/devapidocs/package-list
index fb78277..98c7cec 100644
--- a/devapidocs/package-list
+++ b/devapidocs/package-list
@@ -113,3 +113,4 @@ org.apache.hadoop.metrics2
 org.apache.hadoop.metrics2.impl
 org.apache.hadoop.metrics2.lib
 org.apache.hadoop.metrics2.util
+org.apache.hbase.archetypes.exemplars.client


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index 37c7fee..b29c93a 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2016 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 1683,
-             Errors: 12746,
+      <title>File: 1686,
+             Errors: 12747,
              Warnings: 0,
              Infos: 0
       </title>
@@ -2748,6 +2748,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#log4j.properties">log4j.properties</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.thrift.generated.AlreadyExists.java">org/apache/hadoop/hbase/thrift/generated/AlreadyExists.java</a>
                 </td>
                 <td>
@@ -10135,7 +10149,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  2
+                  3
                 </td>
               </tr>
                           <tr>
@@ -22502,6 +22516,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hbase.archetypes.exemplars.client.HelloHBase.java">org/apache/hbase/archetypes/exemplars/client/HelloHBase.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.RetryCounter.java">org/apache/hadoop/hbase/util/RetryCounter.java</a>
                 </td>
                 <td>
@@ -23272,6 +23300,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hbase.archetypes.exemplars.client.package-info.java">org/apache/hbase/archetypes/exemplars/client/package-info.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.CellSet.java">org/apache/hadoop/hbase/regionserver/CellSet.java</a>
                 </td>
                 <td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 662d103..7ce52d8 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="20160219" />
+    <meta name="Date-Revision-yyyymmdd" content="20160222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -187,7 +187,7 @@
                       <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
 </li>
                   
-                      <li>      <a href="replication.html"  target="_blank" title="Cluster replication">Cluster replication</a>
+                      <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
                       <li class="dropdown-submenu">
@@ -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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index 19df5c2..5c10715 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="20160219" />
+    <meta name="Date-Revision-yyyymmdd" content="20160222" />
     <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" />
@@ -185,7 +185,7 @@
                       <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
 </li>
                   
-                      <li>      <a href="replication.html"  target="_blank" title="Cluster replication">Cluster replication</a>
+                      <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
                       <li class="dropdown-submenu">
@@ -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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index ea27153..8829ea2 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="20160219" />
+    <meta name="Date-Revision-yyyymmdd" content="20160222" />
     <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" />
@@ -185,7 +185,7 @@
                       <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
 </li>
                   
-                      <li>      <a href="replication.html"  target="_blank" title="Cluster replication">Cluster replication</a>
+                      <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
                       <li class="dropdown-submenu">
@@ -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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 5fc6a19..77465a2 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="20160219" />
+    <meta name="Date-Revision-yyyymmdd" content="20160222" />
     <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" />
@@ -185,7 +185,7 @@
                       <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
 </li>
                   
-                      <li>      <a href="replication.html"  target="_blank" title="Cluster replication">Cluster replication</a>
+                      <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
                       <li class="dropdown-submenu">
@@ -284,7 +284,7 @@
 </caption>
 <tr class="a">
 <th>Number of sub-projects:</th>
-<td>24</td></tr>
+<td>27</td></tr>
 <tr class="b">
 <th>Number of dependencies (NOD):</th>
 <td>82</td></tr>
@@ -314,8 +314,11 @@
 <td>
 <ol style="list-style-type: lower-alpha">
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-annotations">org.apache.hbase:hbase-annotations</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes/hbase-archetype-builder">org.apache.hbase:hbase-archetype-builder</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes">org.apache.hbase:hbase-archetypes</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-assembly">org.apache.hbase:hbase-assembly</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-checkstyle">org.apache.hbase:hbase-checkstyle</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes/hbase-client-project">org.apache.hbase:hbase-client-project</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-client">org.apache.hbase:hbase-client</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-common">org.apache.hbase:hbase-common</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-examples">org.apache.hbase:hbase-examples</a></li>
@@ -666,8 +669,11 @@
 <td>
 <ol style="list-style-type: lower-alpha">
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-annotations">org.apache.hbase:hbase-annotations</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes/hbase-archetype-builder">org.apache.hbase:hbase-archetype-builder</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes">org.apache.hbase:hbase-archetypes</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-assembly">org.apache.hbase:hbase-assembly</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-checkstyle">org.apache.hbase:hbase-checkstyle</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes/hbase-client-project">org.apache.hbase:hbase-client-project</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-client">org.apache.hbase:hbase-client</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-common">org.apache.hbase:hbase-common</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-examples">org.apache.hbase:hbase-examples</a></li>
@@ -701,8 +707,11 @@
 <td>
 <ol style="list-style-type: lower-alpha">
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-annotations">org.apache.hbase:hbase-annotations</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes/hbase-archetype-builder">org.apache.hbase:hbase-archetype-builder</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes">org.apache.hbase:hbase-archetypes</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-assembly">org.apache.hbase:hbase-assembly</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-checkstyle">org.apache.hbase:hbase-checkstyle</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes/hbase-client-project">org.apache.hbase:hbase-client-project</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-client">org.apache.hbase:hbase-client</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-common">org.apache.hbase:hbase-common</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-examples">org.apache.hbase:hbase-examples</a></li>
@@ -932,6 +941,7 @@
 <td width="25%">2.0.0-SNAPSHOT</td>
 <td>
 <ol style="list-style-type: lower-alpha">
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes/hbase-client-project">org.apache.hbase:hbase-client-project</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-examples">org.apache.hbase:hbase-examples</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-it">org.apache.hbase:hbase-it</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-rest">org.apache.hbase:hbase-rest</a></li>
@@ -1174,6 +1184,7 @@
 <td>
 <ol style="list-style-type: lower-alpha">
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-assembly">org.apache.hbase:hbase-assembly</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes/hbase-client-project">org.apache.hbase:hbase-client-project</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-examples">org.apache.hbase:hbase-examples</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-it">org.apache.hbase:hbase-it</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-rest">org.apache.hbase:hbase-rest</a></li>
@@ -1397,8 +1408,11 @@
 <td>
 <ol style="list-style-type: lower-alpha">
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-annotations">org.apache.hbase:hbase-annotations</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes/hbase-archetype-builder">org.apache.hbase:hbase-archetype-builder</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes">org.apache.hbase:hbase-archetypes</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-assembly">org.apache.hbase:hbase-assembly</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-checkstyle">org.apache.hbase:hbase-checkstyle</a></li>
+<li><a class="externalLink" href="http://hbase.apache.org/hbase-archetypes/hbase-client-project">org.apache.hbase:hbase-client-project</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-client">org.apache.hbase:hbase-client</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-common">org.apache.hbase:hbase-common</a></li>
 <li><a class="externalLink" href="http://hbase.apache.org/hbase-examples">org.apache.hbase:hbase-examples</a></li>
@@ -1617,7 +1631,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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index f1bc955..05e8a5e 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="20160219" />
+    <meta name="Date-Revision-yyyymmdd" content="20160222" />
     <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" />
@@ -185,7 +185,7 @@
                       <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
 </li>
                   
-                      <li>      <a href="replication.html"  target="_blank" title="Cluster replication">Cluster replication</a>
+                      <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
                       <li class="dropdown-submenu">
@@ -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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index 6478af6..fa40015 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="20160219" />
+    <meta name="Date-Revision-yyyymmdd" content="20160222" />
     <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" />
@@ -185,7 +185,7 @@
                       <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
 </li>
                   
-                      <li>      <a href="replication.html"  target="_blank" title="Cluster replication">Cluster replication</a>
+                      <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
                       <li class="dropdown-submenu">
@@ -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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index d062d6f..4bdf834 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -751,6 +751,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">HeapMemStoreLAB</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.Chunk.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">HeapMemStoreLAB.Chunk</a></li>
 <li><a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io" target="classFrame"><i>HeapSize</i></a></li>
+<li><a href="org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client" target="classFrame">HelloHBase</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/HFile.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">HFile</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/HFile.CachingBlockReader.html" title="interface in org.apache.hadoop.hbase.io.hfile" target="classFrame"><i>HFile.CachingBlockReader</i></a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html" title="class in org.apache.hadoop.hbase.io.hfile" target="classFrame">HFile.FileInfo</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index 0cbb65a..5865c0a 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -751,6 +751,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemStoreLAB</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemStoreLAB.Chunk</a></li>
 <li><a href="org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io"><i>HeapSize</i></a></li>
+<li><a href="org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/HFile.html" title="class in org.apache.hadoop.hbase.io.hfile">HFile</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/HFile.CachingBlockReader.html" title="interface in org.apache.hadoop.hbase.io.hfile"><i>HFile.CachingBlockReader</i></a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html" title="class in org.apache.hadoop.hbase.io.hfile">HFile.FileInfo</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 4bbd418..f5f49d3 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -13865,6 +13865,20 @@
 <td class="colLast"><code>"append"</code></td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.AVG_STORE_FILE_AGE">
+<!--   -->
+</a><code>public&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/regionserver/MetricsRegionServerSource.html#AVG_STORE_FILE_AGE">AVG_STORE_FILE_AGE</a></code></td>
+<td class="colLast"><code>"avgStoreFileAge"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.AVG_STORE_FILE_AGE_DESC">
+<!--   -->
+</a><code>public&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/regionserver/MetricsRegionServerSource.html#AVG_STORE_FILE_AGE_DESC">AVG_STORE_FILE_AGE_DESC</a></code></td>
+<td class="colLast"><code>"Average age of store files hosted on this region server"</code></td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_COUNT">
 <!--   -->
 </a><code>public&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>
@@ -14348,6 +14362,20 @@
 <td class="colLast"><code>"The total amount of data processed during major compactions, in bytes"</code></td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAX_STORE_FILE_AGE">
+<!--   -->
+</a><code>public&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/regionserver/MetricsRegionServerSource.html#MAX_STORE_FILE_AGE">MAX_STORE_FILE_AGE</a></code></td>
+<td class="colLast"><code>"maxStoreFileAge"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAX_STORE_FILE_AGE_DESC">
+<!--   -->
+</a><code>public&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/regionserver/MetricsRegionServerSource.html#MAX_STORE_FILE_AGE_DESC">MAX_STORE_FILE_AGE_DESC</a></code></td>
+<td class="colLast"><code>"Max age of store files hosted on this region server"</code></td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MEMSTORE_SIZE">
 <!--   -->
 </a><code>public&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>
@@ -14390,6 +14418,20 @@
 <td class="colLast"><code>"Server"</code></td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MIN_STORE_FILE_AGE">
+<!--   -->
+</a><code>public&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/regionserver/MetricsRegionServerSource.html#MIN_STORE_FILE_AGE">MIN_STORE_FILE_AGE</a></code></td>
+<td class="colLast"><code>"minStoreFileAge"</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MIN_STORE_FILE_AGE_DESC">
+<!--   -->
+</a><code>public&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/regionserver/MetricsRegionServerSource.html#MIN_STORE_FILE_AGE_DESC">MIN_STORE_FILE_AGE_DESC</a></code></td>
+<td class="colLast"><code>"Min age of store files hosted on this region server"</code></td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MOB_FILE_CACHE_ACCESS_COUNT">
 <!--   -->
 </a><code>public&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>
@@ -14537,6 +14579,20 @@
 <td class="colLast"><code>"mutate"</code></td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.NUM_REFERENCE_FILES">
+<!--   -->
+</a><code>public&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/regionserver/MetricsRegionServerSource.html#NUM_REFERENCE_FILES">NUM_REFERENCE_FILES</a></code></td>
+<td class="colLast"><code>"numReferenceFiles"</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.NUM_REFERENCE_FILES_DESC">
+<!--   -->
+</a><code>public&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/regionserver/MetricsRegionServerSource.html#NUM_REFERENCE_FILES_DESC">NUM_REFERENCE_FILES_DESC</a></code></td>
+<td class="colLast"><code>"Number of reference file on this region server"</code></td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.NUMBER_OF_MUTATIONS_WITHOUT_WAL">
 <!--   -->
 </a><code>public&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>
@@ -19482,27 +19538,34 @@
 <td class="colLast"><code>4</code></td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.tool.Canary.FAILURE_EXIT_CODE">
+<!--   -->
+</a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
+<td><code><a href="org/apache/hadoop/hbase/tool/Canary.html#FAILURE_EXIT_CODE">FAILURE_EXIT_CODE</a></code></td>
+<td class="colLast"><code>5</code></td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.tool.Canary.INIT_ERROR_EXIT_CODE">
 <!--   -->
 </a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/tool/Canary.html#INIT_ERROR_EXIT_CODE">INIT_ERROR_EXIT_CODE</a></code></td>
 <td class="colLast"><code>2</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.tool.Canary.MAX_THREADS_NUM">
 <!--   -->
 </a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/tool/Canary.html#MAX_THREADS_NUM">MAX_THREADS_NUM</a></code></td>
 <td class="colLast"><code>16</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.tool.Canary.TIMEOUT_ERROR_EXIT_CODE">
 <!--   -->
 </a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/tool/Canary.html#TIMEOUT_ERROR_EXIT_CODE">TIMEOUT_ERROR_EXIT_CODE</a></code></td>
 <td class="colLast"><code>3</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.tool.Canary.USAGE_EXIT_CODE">
 <!--   -->
 </a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
@@ -21707,6 +21770,27 @@
 </table>
 </li>
 </ul>
+<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.hbase.archetypes.exemplars.client.<a href="org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">HelloHBase</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.hbase.archetypes.exemplars.client.HelloHBase.MY_NAMESPACE_NAME">
+<!--   -->
+</a><code>protected&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/hbase/archetypes/exemplars/client/HelloHBase.html#MY_NAMESPACE_NAME">MY_NAMESPACE_NAME</a></code></td>
+<td class="colLast"><code>"myTestNamespace"</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar_bottom">


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
index 85d94fa..436c297 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -570,120 +570,128 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getAvgStoreFileAge()">getAvgStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBlockingFileCount()">getBlockingFileCount</a></strong>()</code>
 <div class="block">The number of files required before flushes for this store will be blocked.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBytesPerChecksum(org.apache.hadoop.conf.Configuration)">getBytesPerChecksum</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Returns the configured bytesPerChecksum value.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCacheConfig()">getCacheConfig</a></strong>()</code>
 <div class="block">Used for tests.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util">ChecksumType</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getChecksumType(org.apache.hadoop.conf.Configuration)">getChecksumType</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <div class="block">Returns the configured checksum algorithm.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCloseCheckInterval()">getCloseCheckInterval</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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/regionserver/HStore.html#getColumnFamilyName()">getColumnFamilyName</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsCount()">getCompactedCellsCount</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsSize()">getCompactedCellsSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionCheckMultiplier()">getCompactionCheckMultiplier</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionPressure()">getCompactionPressure</a></strong>()</code>
 <div class="block">This value can represent the degree of emergency of compaction for this store.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionProgress</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionProgress()">getCompactionProgress</a></strong>()</code>
 <div class="block">getter for CompactionProgress object</div>
 </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/regionserver/HStore.html#getCompactPriority()">getCompactPriority</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getComparator()">getComparator</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCoprocessorHost()">getCoprocessorHost</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getDataBlockEncoder()">getDataBlockEncoder</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFamily()">getFamily</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.FileSystem</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFileSystem()">getFileSystem</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushableSize()">getFlushableSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsCount()">getFlushedCellsCount</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsSize()">getFlushedCellsSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getHRegion()">getHRegion</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getLastCompactSize()">getLastCompactSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsCount()">getMajorCompactedCellsCount</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsSize()">getMajorCompactedCellsSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxMemstoreTS()">getMaxMemstoreTS</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxSequenceId()">getMaxSequenceId</a></strong>()</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxStoreFileAge()">getMaxStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemstoreFlushSize()">getMemstoreFlushSize</a></strong>()</code>&nbsp;</td>
@@ -693,22 +701,34 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemStoreSize()">getMemStoreSize</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMinStoreFileAge()">getMinStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getNumHFiles()">getNumHFiles</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getNumReferenceFiles()">getNumReferenceFiles</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/OffPeakHours.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">OffPeakHours</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getOffPeakHours()">getOffPeakHours</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionFileSystem()">getRegionFileSystem</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionInfo()">getRegionInfo</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanInfo()">getScanInfo</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanner(org.apache.hadoop.hbase.client.Scan,%20java.util.NavigableSet,%20long)">getScanner</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;targetCols,
@@ -716,7 +736,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block">Return a scanner for both the memstore and the HStore files.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <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;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long)">getScanners</a></strong>(boolean&nbsp;cacheBlocks,
                       boolean&nbsp;isGet,
@@ -730,7 +750,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
  the line).</div>
 </td>
 </tr>
-<tr class="rowColor">
+<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;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
                       boolean&nbsp;cacheBlocks,
@@ -746,53 +766,53 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
  (that happens further down the line).</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSize()">getSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSmallestReadPoint()">getSmallestReadPoint</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSnapshotSize()">getSnapshotSize</a></strong>()</code>
 <div class="block">Returns the memstore snapshot size</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSplitPoint()">getSplitPoint</a></strong>()</code>
 <div class="block">Determines if Store should be split</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">StoreEngine</a>&lt;?,?,?,?&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreEngine()">getStoreEngine</a></strong>()</code>
 <div class="block">Returns the StoreEngine that is backing this concrete implementation of Store.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefiles()">getStorefiles</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/regionserver/HStore.html#getStorefilesCount()">getStorefilesCount</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesIndexSize()">getStorefilesIndexSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize()">getStorefilesSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreFileTtl()">getStoreFileTtl</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.HRegionInfo,%20byte[])">getStoreHomedir</a></strong>(org.apache.hadoop.fs.Path&nbsp;tabledir,
                               <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;hri,
@@ -800,7 +820,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block"><strong>Deprecated.</strong>&nbsp;</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20java.lang.String,%20byte[])">getStoreHomedir</a></strong>(org.apache.hadoop.fs.Path&nbsp;tabledir,
                               <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;encodedName,
@@ -808,21 +828,21 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block"><strong>Deprecated.</strong>&nbsp;</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreSizeUncompressed()">getStoreSizeUncompressed</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTableName()">getTableName</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticBloomSize()">getTotalStaticBloomSize</a></strong>()</code>
 <div class="block">Returns the total byte size of all Bloom filter bit arrays.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticIndexSize()">getTotalStaticIndexSize</a></strong>()</code>
 <div class="block">Returns the total size of all index blocks in the data block indexes, including the root level,
@@ -830,40 +850,40 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
  single-level indexes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasReferences()">hasReferences</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasTooManyStoreFiles()">hasTooManyStoreFiles</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#heapSize()">heapSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isCellTTLExpired(org.apache.hadoop.hbase.Cell,%20long,%20long)">isCellTTLExpired</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                                 long&nbsp;oldestTimestamp,
                                 long&nbsp;now)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isMajorCompaction()">isMajorCompaction</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isPrimaryReplicaStore()">isPrimaryReplicaStore</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/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#loadStoreFiles()">loadStoreFiles</a></strong>()</code>
 <div class="block">Creates an unsorted list of StoreFile loaded in parallel
  from the given directory.</div>
 </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/HStore.html#logCompactionEndMessage(org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20java.util.List,%20long)">logCompactionEndMessage</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;cr,
                                               <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs,
@@ -871,38 +891,38 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block">Log a very elaborate compaction completion message.</div>
 </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/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveCompatedFilesIntoPlace(org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20java.util.List,%20org.apache.hadoop.hbase.security.User)">moveCompatedFilesIntoPlace</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;cr,
                                                     <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;newFiles,
                                                     <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveFileIntoPlace(org.apache.hadoop.fs.Path)">moveFileIntoPlace</a></strong>(org.apache.hadoop.fs.Path&nbsp;newFile)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#needsCompaction()">needsCompaction</a></strong>()</code>
 <div class="block">See if there's too much store files in this store</div>
 </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/HStore.html#notifyChangedReadersObservers(java.util.List)">notifyChangedReadersObservers</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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</code>&nbsp;</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/HStore.html#onConfigurationChange(org.apache.hadoop.conf.Configuration)">onConfigurationChange</a></strong>(org.apache.hadoop.conf.Configuration&nbsp;conf)</code>
 <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>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#openStoreFiles(java.util.Collection)">openStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;files)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles()">refreshStoreFiles</a></strong>()</code>
 <div class="block">Checks the underlying store files, and opens the files that  have not
@@ -910,13 +930,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
  available.</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/HStore.html#refreshStoreFiles(java.util.Collection)">refreshStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;newFiles)</code>
 <div class="block">Replaces the store files that the store has with the given files.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFilesInternal(java.util.Collection)">refreshStoreFilesInternal</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&gt;&nbsp;newFiles)</code>
 <div class="block">Checks the underlying store files, and opens the files that  have not
@@ -924,28 +944,28 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
  available.</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/HStore.html#registerChildren(org.apache.hadoop.hbase.conf.ConfigurationManager)">registerChildren</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</code>
 <div class="block">Needs to be called to register the children to the manager.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#removeCompactedfiles(java.util.Collection)">removeCompactedfiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedfiles)</code>
 <div class="block">Archives and removes the compacted files</div>
 </td>
 </tr>
-<tr 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/HStore.html#removeUnneededFiles()">removeUnneededFiles</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles(java.util.Collection,%20java.util.Collection)">replaceStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedFiles,
                                   <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;result)</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/HStore.html#replayCompactionMarker(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor,%20boolean,%20boolean)">replayCompactionMarker</a></strong>(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
                                             boolean&nbsp;pickCompactionFiles,
@@ -953,64 +973,64 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block">Call to complete a compaction.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction()">requestCompaction</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest)">requestCompaction</a></strong>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20org.apache.hadoop.hbase.security.User)">requestCompaction</a></strong>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest,
                                   <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#rollback(org.apache.hadoop.hbase.Cell)">rollback</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>
 <div class="block">Removes a Cell from the memstore.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setDataBlockEncoderInTest(org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder)">setDataBlockEncoderInTest</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a>&nbsp;blockEncoder)</code>
 <div class="block">Should be used only in tests.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setScanInfo(org.apache.hadoop.hbase.regionserver.ScanInfo)">setScanInfo</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo)</code>
 <div class="block">Set scan info, used by test</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#snapshot()">snapshot</a></strong>()</code>
 <div class="block">Snapshot this stores memstore.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#throttleCompaction(long)">throttleCompaction</a></strong>(long&nbsp;compactionSize)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#timeOfOldestEdit()">timeOfOldestEdit</a></strong>()</code>
 <div class="block">When was the last edit done in the memstore</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><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/regionserver/HStore.html#toString()">toString</a></strong>()</code>&nbsp;</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/HStore.html#triggerMajorCompaction()">triggerMajorCompaction</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#updateColumnValue(byte[],%20byte[],%20byte[],%20long)">updateColumnValue</a></strong>(byte[]&nbsp;row,
                                   byte[]&nbsp;f,
@@ -1019,29 +1039,29 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <div class="block">Updates the value for the given row/family/qualifier.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#updateStorefiles(java.util.List,%20long)">updateStorefiles</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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs,
                                 long&nbsp;snapshotId)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#upsert(java.lang.Iterable,%20long)">upsert</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
             long&nbsp;readpoint)</code>
 <div class="block">Adds or replaces the specified KeyValues.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#validateStoreFile(org.apache.hadoop.fs.Path)">validateStoreFile</a></strong>(org.apache.hadoop.fs.Path&nbsp;path)</code>
 <div class="block">Validates a store file by opening and closing it.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#versionsToReturn(int)">versionsToReturn</a></strong>(int&nbsp;wantedVersions)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#writeCompactionWalRecord(java.util.Collection,%20java.util.Collection)">writeCompactionWalRecord</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesCompacted,
                                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;newFiles)</code>
@@ -1468,7 +1488,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <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/HStore.html#line.2173">FIXED_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2256">FIXED_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="DEEP_OVERHEAD">
@@ -1477,7 +1497,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DEEP_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2177">DEEP_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2260">DEEP_OVERHEAD</a></pre>
 </li>
 </ul>
 </li>
@@ -2782,13 +2802,78 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <dt><span class="strong">Returns:</span></dt><dd>Count of store files</dd></dl>
 </li>
 </ul>
+<a name="getMaxStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMaxStoreFileAge</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1891">getMaxStoreFileAge</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMaxStoreFileAge()">getMaxStoreFileAge</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Max age of store files in this store</dd></dl>
+</li>
+</ul>
+<a name="getMinStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMinStoreFileAge</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1910">getMinStoreFileAge</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMinStoreFileAge()">getMinStoreFileAge</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Min age of store files in this store</dd></dl>
+</li>
+</ul>
+<a name="getAvgStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getAvgStoreFileAge</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1929">getAvgStoreFileAge</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getAvgStoreFileAge()">getAvgStoreFileAge</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Average age of store files in this store, 0 if no store files</dd></dl>
+</li>
+</ul>
+<a name="getNumReferenceFiles()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNumReferenceFiles</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1952">getNumReferenceFiles</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getNumReferenceFiles()">getNumReferenceFiles</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Number of reference files in this store</dd></dl>
+</li>
+</ul>
+<a name="getNumHFiles()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNumHFiles</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1963">getNumHFiles</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getNumHFiles()">getNumHFiles</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Number of HFiles in this store</dd></dl>
+</li>
+</ul>
 <a name="getStoreSizeUncompressed()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreSizeUncompressed</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1891">getStoreSizeUncompressed</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1974">getStoreSizeUncompressed</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStoreSizeUncompressed()">getStoreSizeUncompressed</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2801,7 +2886,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getStorefilesSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1896">getStorefilesSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1979">getStorefilesSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefilesSize()">getStorefilesSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2814,7 +2899,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getStorefilesIndexSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1910">getStorefilesIndexSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1993">getStorefilesIndexSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefilesIndexSize()">getStorefilesIndexSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2827,7 +2912,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalStaticIndexSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1924">getTotalStaticIndexSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2007">getTotalStaticIndexSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getTotalStaticIndexSize()">Store</a></code></strong></div>
 <div class="block">Returns the total size of all index blocks in the data block indexes, including the root level,
  intermediate levels, and the leaf level for multi-level indexes, or just the root level for
@@ -2844,7 +2929,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalStaticBloomSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1937">getTotalStaticBloomSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2020">getTotalStaticBloomSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getTotalStaticBloomSize()">Store</a></code></strong></div>
 <div class="block">Returns the total byte size of all Bloom filter bit arrays. For compound Bloom filters even the
  Bloom blocks currently not loaded into the block cache are counted.</div>
@@ -2860,7 +2945,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1950">getMemStoreSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2033">getMemStoreSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMemStoreSize()">getMemStoreSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2873,7 +2958,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/HStore.html#line.1955">getCompactPriority</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2038">getCompactPriority</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactPriority()">getCompactPriority</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2886,7 +2971,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>throttleCompaction</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1964">throttleCompaction</a>(long&nbsp;compactionSize)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2047">throttleCompaction</a>(long&nbsp;compactionSize)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#throttleCompaction(long)">throttleCompaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2899,7 +2984,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getHRegion</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1968">getHRegion</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2051">getHRegion</a>()</pre>
 </li>
 </ul>
 <a name="getCoprocessorHost()">
@@ -2908,7 +2993,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/HStore.html#line.1973">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/HStore.html#line.2056">getCoprocessorHost</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCoprocessorHost()">getCoprocessorHost</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2921,7 +3006,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1978">getRegionInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2061">getRegionInfo</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getRegionInfo()">getRegionInfo</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2934,7 +3019,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>areWritesEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1983">areWritesEnabled</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2066">areWritesEnabled</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#areWritesEnabled()">areWritesEnabled</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2947,7 +3032,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getSmallestReadPoint</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.1988">getSmallestReadPoint</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2071">getSmallestReadPoint</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getSmallestReadPoint()">getSmallestReadPoint</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -2962,7 +3047,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>updateColumnValue</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2004">updateColumnValue</a>(byte[]&nbsp;row,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2087">updateColumnValue</a>(byte[]&nbsp;row,
                      byte[]&nbsp;f,
                      byte[]&nbsp;qualifier,
                      long&nbsp;newValue)
@@ -2982,7 +3067,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>upsert</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2024">upsert</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2107">upsert</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
           long&nbsp;readpoint)
             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/Store.html#upsert(java.lang.Iterable,%20long)">Store</a></code></strong></div>
@@ -3008,7 +3093,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>createFlushContext</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFlushContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2034">createFlushContext</a>(long&nbsp;cacheFlushId)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFlushContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2117">createFlushContext</a>(long&nbsp;cacheFlushId)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#createFlushContext(long)">createFlushContext</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3021,7 +3106,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>needsCompaction</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2164">needsCompaction</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2247">needsCompaction</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#needsCompaction()">Store</a></code></strong></div>
 <div class="block">See if there's too much store files in this store</div>
 <dl>
@@ -3036,7 +3121,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCacheConfig</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2169">getCacheConfig</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2252">getCacheConfig</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCacheConfig()">Store</a></code></strong></div>
 <div class="block">Used for tests.</div>
 <dl>
@@ -3051,7 +3136,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/HStore.html#line.2184">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2267">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>
@@ -3065,7 +3150,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getComparator</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/HStore.html#line.2189">getComparator</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/HStore.html#line.2272">getComparator</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getComparator()">getComparator</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3078,7 +3163,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanInfo</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2194">getScanInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2277">getScanInfo</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanInfo()">getScanInfo</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3091,7 +3176,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>setScanInfo</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2202">setScanInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2285">setScanInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a>&nbsp;scanInfo)</pre>
 <div class="block">Set scan info, used by test</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>scanInfo</code> - new scan info to use for test</dd></dl>
 </li>
@@ -3102,7 +3187,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>hasTooManyStoreFiles</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2207">hasTooManyStoreFiles</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2290">hasTooManyStoreFiles</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#hasTooManyStoreFiles()">hasTooManyStoreFiles</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3115,7 +3200,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushedCellsCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2212">getFlushedCellsCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2295">getFlushedCellsCount</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getFlushedCellsCount()">getFlushedCellsCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3128,7 +3213,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushedCellsSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2217">getFlushedCellsSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2300">getFlushedCellsSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getFlushedCellsSize()">getFlushedCellsSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3141,7 +3226,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactedCellsCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2222">getCompactedCellsCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2305">getCompactedCellsCount</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactedCellsCount()">getCompactedCellsCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3154,7 +3239,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactedCellsSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2227">getCompactedCellsSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2310">getCompactedCellsSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactedCellsSize()">getCompactedCellsSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3167,7 +3252,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getMajorCompactedCellsCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2232">getMajorCompactedCellsCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2315">getMajorCompactedCellsCount</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMajorCompactedCellsCount()">getMajorCompactedCellsCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3180,7 +3265,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getMajorCompactedCellsSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2237">getMajorCompactedCellsSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2320">getMajorCompactedCellsSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMajorCompactedCellsSize()">getMajorCompactedCellsSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3193,7 +3278,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreEngine</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">StoreEngine</a>&lt;?,?,?,?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2246">getStoreEngine</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver">StoreEngine</a>&lt;?,?,?,?&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2329">getStoreEngine</a>()</pre>
 <div class="block">Returns the StoreEngine that is backing this concrete implementation of Store.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Returns the <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreEngine.html" title="class in org.apache.hadoop.hbase.regionserver"><code>StoreEngine</code></a> object used internally inside this HStore object.</dd></dl>
 </li>
@@ -3204,7 +3289,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getOffPeakHours</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/OffPeakHours.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">OffPeakHours</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2250">getOffPeakHours</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/OffPeakHours.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">OffPeakHours</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2333">getOffPeakHours</a>()</pre>
 </li>
 </ul>
 <a name="onConfigurationChange(org.apache.hadoop.conf.Configuration)">
@@ -3213,7 +3298,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/HStore.html#line.2258">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2341">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>
@@ -3228,7 +3313,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/HStore.html#line.2270">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/HStore.html#line.2353">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>
@@ -3242,7 +3327,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/HStore.html#line.2278">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/HStore.html#line.2361">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>
@@ -3256,7 +3341,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionPressure</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2283">getCompactionPressure</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2366">getCompactionPressure</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactionPressure()">Store</a></code></strong></div>
 <div class="block">This value can represent the degree of emergency of compaction for this store. It should be
  greater than or equal to 0.0, any value greater than 1.0 means we have too many store files.
@@ -3283,7 +3368,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>isPrimaryReplicaStore</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2288">isPrimaryReplicaStore</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2371">isPrimaryReplicaStore</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#isPrimaryReplicaStore()">isPrimaryReplicaStore</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html" title="interface in org.apache.hadoop.hbase.regionserver">Store</a></code></dd>
@@ -3296,7 +3381,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>closeAndArchiveCompactedFiles</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2293">closeAndArchiveCompactedFiles</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2376">closeAndArchiveCompactedFiles</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/Store.html#closeAndArchiveCompactedFiles()">Store</a></code></strong></div>
 <div class="block">Closes and archives the compacted files under this store</div>
@@ -3313,7 +3398,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>removeCompactedfiles</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2321">removeCompactedfiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedfiles)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2404">removeCompactedfiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;compactedfiles)
                            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">Archives and removes the compacted files</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>compactedfiles</code> - The compacted files in this store that are not active in reads</dd>
@@ -3327,7 +3412,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>clearCompactedfiles</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2368">clearCompactedfiles</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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesToRemove)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2451">clearCompactedfiles</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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;filesToRemove)
                           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>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html
index 22878ab..048adec 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html
@@ -670,7 +670,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html#line.254">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html#line.270">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>
@@ -683,7 +683,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockListLast">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html#line.259">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/regionserver/MetricsRegionSourceImpl.html#line.275">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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html
index c33fb69..ca4586a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html
@@ -114,10 +114,18 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getAvgStoreFileAge()">getAvgStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getFilteredReadRequestCount()">getFilteredReadRequestCount</a></strong>()</code>
 <div class="block">Get the total number of filtered read requests that have been issued against this region</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getMaxStoreFileAge()">getMaxStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getMemstoreSize()">getMemstoreSize</a></strong>()</code>
@@ -125,23 +133,31 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getMinStoreFileAge()">getMinStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code><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/regionserver/MetricsRegionWrapper.html#getNamespace()">getNamespace</a></strong>()</code>
 <div class="block">Get the name of the namespace this table is in.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumBytesCompacted()">getNumBytesCompacted</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumCompactionsCompleted()">getNumCompactionsCompleted</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumFilesCompacted()">getNumFilesCompacted</a></strong>()</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumReferenceFiles()">getNumReferenceFiles</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumStoreFiles()">getNumStoreFiles</a></strong>()</code>
@@ -302,13 +318,53 @@
 <div class="block">Get the total number of filtered read requests that have been issued against this region</div>
 </li>
 </ul>
+<a name="getMaxStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMaxStoreFileAge</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.80">getMaxStoreFileAge</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Max age of store files under this region</dd></dl>
+</li>
+</ul>
+<a name="getMinStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMinStoreFileAge</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.85">getMinStoreFileAge</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Min age of store files under this region</dd></dl>
+</li>
+</ul>
+<a name="getAvgStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getAvgStoreFileAge</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.90">getAvgStoreFileAge</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Average age of store files under this region</dd></dl>
+</li>
+</ul>
+<a name="getNumReferenceFiles()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNumReferenceFiles</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.95">getNumReferenceFiles</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Number of reference files under this region</dd></dl>
+</li>
+</ul>
 <a name="getWriteRequestCount()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteRequestCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.80">getWriteRequestCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.100">getWriteRequestCount</a>()</pre>
 <div class="block">Get the total number of mutations that have been issued against this region.</div>
 </li>
 </ul>
@@ -318,7 +374,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumFilesCompacted</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.82">getNumFilesCompacted</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.102">getNumFilesCompacted</a>()</pre>
 </li>
 </ul>
 <a name="getNumBytesCompacted()">
@@ -327,7 +383,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumBytesCompacted</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.84">getNumBytesCompacted</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.104">getNumBytesCompacted</a>()</pre>
 </li>
 </ul>
 <a name="getNumCompactionsCompleted()">
@@ -336,7 +392,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumCompactionsCompleted</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.86">getNumCompactionsCompleted</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.106">getNumCompactionsCompleted</a>()</pre>
 </li>
 </ul>
 <a name="getRegionHashCode()">
@@ -345,7 +401,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionHashCode</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.88">getRegionHashCode</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.108">getRegionHashCode</a>()</pre>
 </li>
 </ul>
 <a name="getReplicaId()">
@@ -354,7 +410,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getReplicaId</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.93">getReplicaId</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#line.113">getReplicaId</a>()</pre>
 <div class="block">Get the replica id of this region.</div>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html
index 80271cc..857be53 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.144">MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.168">MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable</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="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
 </li>
@@ -173,7 +173,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html#line.144">MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html#line.168">MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable</a>()</pre>
 </li>
 </ul>
 </li>
@@ -190,7 +190,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html#line.147">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html#line.171">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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html
index 927b950..c0b12f9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html
@@ -141,15 +141,31 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#avgStoreFileAge">avgStoreFileAge</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#executor">executor</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#maxStoreFileAge">maxStoreFileAge</a></strong></code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#memstoreSize">memstoreSize</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#minStoreFileAge">minStoreFileAge</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#numReferenceFiles">numReferenceFiles</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#numStoreFiles">numStoreFiles</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -214,10 +230,18 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getAvgStoreFileAge()">getAvgStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getFilteredReadRequestCount()">getFilteredReadRequestCount</a></strong>()</code>
 <div class="block">Get the total number of filtered read requests that have been issued against this region</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getMaxStoreFileAge()">getMaxStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getMemstoreSize()">getMemstoreSize</a></strong>()</code>
@@ -225,23 +249,31 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getMinStoreFileAge()">getMinStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code><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/regionserver/MetricsRegionWrapperImpl.html#getNamespace()">getNamespace</a></strong>()</code>
 <div class="block">Get the name of the namespace this table is in.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getNumBytesCompacted()">getNumBytesCompacted</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getNumCompactionsCompleted()">getNumCompactionsCompleted</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getNumFilesCompacted()">getNumFilesCompacted</a></strong>()</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getNumReferenceFiles()">getNumReferenceFiles</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#getNumStoreFiles()">getNumStoreFiles</a></strong>()</code>
@@ -390,13 +422,49 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.45">storeFileSize</a></pre>
 </li>
 </ul>
+<a name="maxStoreFileAge">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>maxStoreFileAge</h4>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.46">maxStoreFileAge</a></pre>
+</li>
+</ul>
+<a name="minStoreFileAge">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>minStoreFileAge</h4>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.47">minStoreFileAge</a></pre>
+</li>
+</ul>
+<a name="avgStoreFileAge">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>avgStoreFileAge</h4>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.48">avgStoreFileAge</a></pre>
+</li>
+</ul>
+<a name="numReferenceFiles">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>numReferenceFiles</h4>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.49">numReferenceFiles</a></pre>
+</li>
+</ul>
 <a name="regionMetricsUpdateTask">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>regionMetricsUpdateTask</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledFuture.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledFuture</a>&lt;?&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.47">regionMetricsUpdateTask</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledFuture.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledFuture</a>&lt;?&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.51">regionMetricsUpdateTask</a></pre>
 </li>
 </ul>
 </li>
@@ -413,7 +481,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetricsRegionWrapperImpl</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.49">MetricsRegionWrapperImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.53">MetricsRegionWrapperImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)</pre>
 </li>
 </ul>
 </li>
@@ -430,7 +498,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</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/regionserver/MetricsRegionWrapperImpl.html#line.58">getTableName</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/regionserver/MetricsRegionWrapperImpl.html#line.62">getTableName</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getTableName()">MetricsRegionWrapper</a></code></strong></div>
 <div class="block">Get the name of the table the region belongs to.</div>
 <dl>
@@ -445,7 +513,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNamespace</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/regionserver/MetricsRegionWrapperImpl.html#line.67">getNamespace</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/regionserver/MetricsRegionWrapperImpl.html#line.71">getNamespace</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNamespace()">MetricsRegionWrapper</a></code></strong></div>
 <div class="block">Get the name of the namespace this table is in.</div>
 <dl>
@@ -460,7 +528,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionName</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/regionserver/MetricsRegionWrapperImpl.html#line.77">getRegionName</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/regionserver/MetricsRegionWrapperImpl.html#line.81">getRegionName</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getRegionName()">MetricsRegionWrapper</a></code></strong></div>
 <div class="block">Get the name of the region.</div>
 <dl>
@@ -475,7 +543,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumStores</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.86">getNumStores</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.90">getNumStores</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumStores()">MetricsRegionWrapper</a></code></strong></div>
 <div class="block">Get the number of stores hosted on this region server.</div>
 <dl>
@@ -490,7 +558,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumStoreFiles</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.95">getNumStoreFiles</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.99">getNumStoreFiles</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumStoreFiles()">MetricsRegionWrapper</a></code></strong></div>
 <div class="block">Get the number of store files hosted on this region server.</div>
 <dl>
@@ -505,7 +573,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemstoreSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.100">getMemstoreSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.104">getMemstoreSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getMemstoreSize()">MetricsRegionWrapper</a></code></strong></div>
 <div class="block">Get the size of the memstore on this region server.</div>
 <dl>
@@ -520,7 +588,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFileSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.105">getStoreFileSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.109">getStoreFileSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getStoreFileSize()">MetricsRegionWrapper</a></code></strong></div>
 <div class="block">Get the total size of the store files this region server is serving from.</div>
 <dl>
@@ -535,7 +603,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadRequestCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.110">getReadRequestCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.114">getReadRequestCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getReadRequestCount()">MetricsRegionWrapper</a></code></strong></div>
 <div class="block">Get the total number of read requests that have been issued against this region</div>
 <dl>
@@ -550,7 +618,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilteredReadRequestCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.115">getFilteredReadRequestCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.119">getFilteredReadRequestCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getFilteredReadRequestCount()">MetricsRegionWrapper</a></code></strong></div>
 <div class="block">Get the total number of filtered read requests that have been issued against this region</div>
 <dl>
@@ -565,7 +633,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteRequestCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.120">getWriteRequestCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.124">getWriteRequestCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getWriteRequestCount()">MetricsRegionWrapper</a></code></strong></div>
 <div class="block">Get the total number of mutations that have been issued against this region.</div>
 <dl>
@@ -580,7 +648,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumFilesCompacted</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.125">getNumFilesCompacted</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.129">getNumFilesCompacted</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumFilesCompacted()">getNumFilesCompacted</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></code></dd>
@@ -593,7 +661,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumBytesCompacted</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.130">getNumBytesCompacted</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.134">getNumBytesCompacted</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumBytesCompacted()">getNumBytesCompacted</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></code></dd>
@@ -606,20 +674,72 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumCompactionsCompleted</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.135">getNumCompactionsCompleted</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.139">getNumCompactionsCompleted</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumCompactionsCompleted()">getNumCompactionsCompleted</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></code></dd>
 </dl>
 </li>
 </ul>
+<a name="getMaxStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMaxStoreFileAge</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.144">getMaxStoreFileAge</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getMaxStoreFileAge()">getMaxStoreFileAge</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Max age of store files under this region</dd></dl>
+</li>
+</ul>
+<a name="getMinStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMinStoreFileAge</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.149">getMinStoreFileAge</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getMinStoreFileAge()">getMinStoreFileAge</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Min age of store files under this region</dd></dl>
+</li>
+</ul>
+<a name="getAvgStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getAvgStoreFileAge</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.154">getAvgStoreFileAge</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getAvgStoreFileAge()">getAvgStoreFileAge</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Average age of store files under this region</dd></dl>
+</li>
+</ul>
+<a name="getNumReferenceFiles()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNumReferenceFiles</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.159">getNumReferenceFiles</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getNumReferenceFiles()">getNumReferenceFiles</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Number of reference files under this region</dd></dl>
+</li>
+</ul>
 <a name="getRegionHashCode()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionHashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.140">getRegionHashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.164">getRegionHashCode</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html#getRegionHashCode()">getRegionHashCode</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionWrapper</a></code></dd>
@@ -632,7 +752,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.167">close</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.219">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><strong>Specified by:</strong></dt>
@@ -649,7 +769,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getReplicaId</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.175">getReplicaId</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html#line.227">getReplicaId</a>()</pre>
 <div class="block">Get the replica id of this region.</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/Store.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/Store.html b/devapidocs/org/apache/hadoop/hbase/regionserver/Store.html
index 83bf1d6..bd3ce94 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/Store.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/Store.html
@@ -236,104 +236,124 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#deleteChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">deleteChangedReaderObserver</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getAvgStoreFileAge()">getAvgStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCacheConfig()">getCacheConfig</a></strong>()</code>
 <div class="block">Used for tests.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><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/regionserver/Store.html#getColumnFamilyName()">getColumnFamilyName</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactedCellsCount()">getCompactedCellsCount</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactedCellsSize()">getCompactedCellsSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactionPressure()">getCompactionPressure</a></strong>()</code>
 <div class="block">This value can represent the degree of emergency of compaction for this store.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionProgress</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCompactionProgress()">getCompactionProgress</a></strong>()</code>
 <div class="block">getter for CompactionProgress object</div>
 </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/regionserver/Store.html#getCompactPriority()">getCompactPriority</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getComparator()">getComparator</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getCoprocessorHost()">getCoprocessorHost</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getDataBlockEncoder()">getDataBlockEncoder</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getFamily()">getFamily</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.FileSystem</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getFileSystem()">getFileSystem</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getFlushableSize()">getFlushableSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getFlushedCellsCount()">getFlushedCellsCount</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getFlushedCellsSize()">getFlushedCellsSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getLastCompactSize()">getLastCompactSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMajorCompactedCellsCount()">getMajorCompactedCellsCount</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMajorCompactedCellsSize()">getMajorCompactedCellsSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMaxMemstoreTS()">getMaxMemstoreTS</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMaxSequenceId()">getMaxSequenceId</a></strong>()</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMaxStoreFileAge()">getMaxStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMemStoreSize()">getMemStoreSize</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getMinStoreFileAge()">getMinStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getNumHFiles()">getNumHFiles</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getNumReferenceFiles()">getNumReferenceFiles</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getRegionInfo()">getRegionInfo</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanInfo.html" title="class in org.apache.hadoop.hbase.regionserver">ScanInfo</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanInfo()">getScanInfo</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanner(org.apache.hadoop.hbase.client.Scan,%20java.util.NavigableSet,%20long)">getScanner</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;byte[]&gt;&nbsp;targetCols,
@@ -341,7 +361,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <div class="block">Return a scanner for both the memstore and the HStore files.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <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;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanners(boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long)">getScanners</a></strong>(boolean&nbsp;cacheBlocks,
                       boolean&nbsp;isGet,
@@ -355,7 +375,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
  the line).</div>
 </td>
 </tr>
-<tr class="rowColor">
+<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;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</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="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;files,
                       boolean&nbsp;cacheBlocks,
@@ -371,57 +391,57 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
  (that happens further down the line).</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getSize()">getSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getSmallestReadPoint()">getSmallestReadPoint</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getSnapshotSize()">getSnapshotSize</a></strong>()</code>
 <div class="block">Returns the memstore snapshot size</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>byte[]</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getSplitPoint()">getSplitPoint</a></strong>()</code>
 <div class="block">Determines if Store should be split</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefiles()">getStorefiles</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefilesCount()">getStorefilesCount</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefilesIndexSize()">getStorefilesIndexSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStorefilesSize()">getStorefilesSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getStoreSizeUncompressed()">getStoreSizeUncompressed</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getTableName()">getTableName</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getTotalStaticBloomSize()">getTotalStaticBloomSize</a></strong>()</code>
 <div class="block">Returns the total byte size of all Bloom filter bit arrays.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#getTotalStaticIndexSize()">getTotalStaticIndexSize</a></strong>()</code>
 <div class="block">Returns the total size of all index blocks in the data block indexes, including the root level,
@@ -429,29 +449,29 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
  single-level indexes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#hasReferences()">hasReferences</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#hasTooManyStoreFiles()">hasTooManyStoreFiles</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#isMajorCompaction()">isMajorCompaction</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#isPrimaryReplicaStore()">isPrimaryReplicaStore</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#needsCompaction()">needsCompaction</a></strong>()</code>
 <div class="block">See if there's too much store files in this store</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/Store.html#refreshStoreFiles()">refreshStoreFiles</a></strong>()</code>
 <div class="block">Checks the underlying store files, and opens the files that  have not
@@ -459,13 +479,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
  available.</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/Store.html#refreshStoreFiles(java.util.Collection)">refreshStoreFiles</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;newFiles)</code>
 <div class="block">Replaces the store files that the store has with the given files.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#replayCompactionMarker(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor,%20boolean,%20boolean)">replayCompactionMarker</a></strong>(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
                                             boolean&nbsp;pickCompactionFiles,
@@ -473,11 +493,11 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <div class="block">Call to complete a compaction.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#requestCompaction()">requestCompaction</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest)">requestCompaction</a></strong>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest)</code>
@@ -486,33 +506,33 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20org.apache.hadoop.hbase.security.User)">requestCompaction</a></strong>(int&nbsp;priority,
                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequest</a>&nbsp;baseRequest,
                                   <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#rollback(org.apache.hadoop.hbase.Cell)">rollback</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</code>
 <div class="block">Removes a Cell from the memstore.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#throttleCompaction(long)">throttleCompaction</a></strong>(long&nbsp;compactionSize)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#timeOfOldestEdit()">timeOfOldestEdit</a></strong>()</code>
 <div class="block">When was the last edit done in the memstore</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/Store.html#triggerMajorCompaction()">triggerMajorCompaction</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/Store.html#upsert(java.lang.Iterable,%20long)">upsert</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
             long&nbsp;readpoint)</code>
@@ -1132,13 +1152,63 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <dl><dt><span class="strong">Returns:</span></dt><dd>Count of store files</dd></dl>
 </li>
 </ul>
+<a name="getMaxStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMaxStoreFileAge</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.351">getMaxStoreFileAge</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Max age of store files in this store</dd></dl>
+</li>
+</ul>
+<a name="getMinStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMinStoreFileAge</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.356">getMinStoreFileAge</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Min age of store files in this store</dd></dl>
+</li>
+</ul>
+<a name="getAvgStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getAvgStoreFileAge</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.361">getAvgStoreFileAge</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Average age of store files in this store, 0 if no store files</dd></dl>
+</li>
+</ul>
+<a name="getNumReferenceFiles()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNumReferenceFiles</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.366">getNumReferenceFiles</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Number of reference files in this store</dd></dl>
+</li>
+</ul>
+<a name="getNumHFiles()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNumHFiles</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.371">getNumHFiles</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Number of HFiles in this store</dd></dl>
+</li>
+</ul>
 <a name="getStoreSizeUncompressed()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreSizeUncompressed</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.351">getStoreSizeUncompressed</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.376">getStoreSizeUncompressed</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The size of the store files, in bytes, uncompressed.</dd></dl>
 </li>
 </ul>
@@ -1148,7 +1218,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getStorefilesSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.356">getStorefilesSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.381">getStorefilesSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The size of the store files, in bytes.</dd></dl>
 </li>
 </ul>
@@ -1158,7 +1228,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getStorefilesIndexSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.361">getStorefilesIndexSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.386">getStorefilesIndexSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The size of the store file indexes, in bytes.</dd></dl>
 </li>
 </ul>
@@ -1168,7 +1238,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalStaticIndexSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.369">getTotalStaticIndexSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.394">getTotalStaticIndexSize</a>()</pre>
 <div class="block">Returns the total size of all index blocks in the data block indexes, including the root level,
  intermediate levels, and the leaf level for multi-level indexes, or just the root level for
  single-level indexes.</div>
@@ -1181,7 +1251,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalStaticBloomSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.376">getTotalStaticBloomSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.401">getTotalStaticBloomSize</a>()</pre>
 <div class="block">Returns the total byte size of all Bloom filter bit arrays. For compound Bloom filters even the
  Bloom blocks currently not loaded into the block cache are counted.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the total size of all Bloom filters in the store</dd></dl>
@@ -1193,7 +1263,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCacheConfig</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.384">getCacheConfig</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.409">getCacheConfig</a>()</pre>
 <div class="block">Used for tests.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>cache configuration for this Store.</dd></dl>
 </li>
@@ -1204,7 +1274,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.389">getRegionInfo</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.414">getRegionInfo</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the parent region info hosting this store</dd></dl>
 </li>
 </ul>
@@ -1214,7 +1284,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessorHost</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.391">getCoprocessorHost</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.416">getCoprocessorHost</a>()</pre>
 </li>
 </ul>
 <a name="areWritesEnabled()">
@@ -1223,7 +1293,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>areWritesEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.393">areWritesEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.418">areWritesEnabled</a>()</pre>
 </li>
 </ul>
 <a name="getSmallestReadPoint()">
@@ -1232,7 +1302,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getSmallestReadPoint</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.400">getSmallestReadPoint</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.425">getSmallestReadPoint</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The smallest mvcc readPoint across all the scanners in this
  region. Writes older than this readPoint, are included  in every
  read operation.</dd></dl>
@@ -1244,7 +1314,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getColumnFamilyName</h4>
-<pre><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/regionserver/Store.html#line.402">getColumnFamilyName</a>()</pre>
+<pre><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/regionserver/Store.html#line.427">getColumnFamilyName</a>()</pre>
 </li>
 </ul>
 <a name="getTableName()">
@@ -1253,7 +1323,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableName</h4>
-<pre><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/regionserver/Store.html#line.404">getTableName</a>()</pre>
+<pre><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/regionserver/Store.html#line.429">getTableName</a>()</pre>
 </li>
 </ul>
 <a name="getFlushedCellsCount()">
@@ -1262,7 +1332,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushedCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.409">getFlushedCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.434">getFlushedCellsCount</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The number of cells flushed to disk</dd></dl>
 </li>
 </ul>
@@ -1272,7 +1342,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushedCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.414">getFlushedCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.439">getFlushedCellsSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The total size of data flushed to disk, in bytes</dd></dl>
 </li>
 </ul>
@@ -1282,7 +1352,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactedCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.419">getCompactedCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.444">getCompactedCellsCount</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The number of cells processed during minor compactions</dd></dl>
 </li>
 </ul>
@@ -1292,7 +1362,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactedCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.424">getCompactedCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.449">getCompactedCellsSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The total amount of data processed during minor compactions, in bytes</dd></dl>
 </li>
 </ul>
@@ -1302,7 +1372,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getMajorCompactedCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.429">getMajorCompactedCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.454">getMajorCompactedCellsCount</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The number of cells processed during major compactions</dd></dl>
 </li>
 </ul>
@@ -1312,7 +1382,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getMajorCompactedCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.434">getMajorCompactedCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.459">getMajorCompactedCellsSize</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The total amount of data processed during major compactions, in bytes</dd></dl>
 </li>
 </ul>
@@ -1322,7 +1392,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>addChangedReaderObserver</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.439">addChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.464">addChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
 </li>
 </ul>
 <a name="deleteChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">
@@ -1331,7 +1401,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteChangedReaderObserver</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.444">deleteChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.469">deleteChangedReaderObserver</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChangedReadersObserver.html" title="interface in org.apache.hadoop.hbase.regionserver">ChangedReadersObserver</a>&nbsp;o)</pre>
 </li>
 </ul>
 <a name="hasTooManyStoreFiles()">
@@ -1340,7 +1410,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>hasTooManyStoreFiles</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.449">hasTooManyStoreFiles</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.474">hasTooManyStoreFiles</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Whether this store has too many store files.</dd></dl>
 </li>
 </ul>
@@ -1350,7 +1420,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshStoreFiles</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.458">refreshStoreFiles</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.483">refreshStoreFiles</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">Checks the underlying store files, and opens the files that  have not
  been opened, and removes the store file readers for store files no longer
@@ -1366,7 +1436,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionPressure</h4>
-<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.475">getCompactionPressure</a>()</pre>
+<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.500">getCompactionPressure</a>()</pre>
 <div class="block">This value can represent the degree of emergency of compaction for this store. It should be
  greater than or equal to 0.0, any value greater than 1.0 means we have too many store files.
  <ul>
@@ -1388,7 +1458,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshStoreFiles</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.483">refreshStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;newFiles)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.508">refreshStoreFiles</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;newFiles)
                        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">Replaces the store files that the store has with the given files. Mainly used by
  secondary region replicas to keep up to date with
@@ -1403,7 +1473,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadHFile</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.485">bulkLoadHFile</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&nbsp;fileInfo)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.510">bulkLoadHFile</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileInfo</a>&nbsp;fileInfo)
                    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>
@@ -1415,7 +1485,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>isPrimaryReplicaStore</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.487">isPrimaryReplicaStore</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.512">isPrimaryReplicaStore</a>()</pre>
 </li>
 </ul>
 <a name="closeAndArchiveCompactedFiles()">
@@ -1424,7 +1494,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title=
 <ul class="blockListLast">
 <li class="blockList">
 <h4>closeAndArchiveCompactedFiles</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.492">closeAndArchiveCompactedFiles</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/Store.html#line.517">closeAndArchiveCompactedFiles</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">Closes and archives the compacted files under this store</div>
 <dl><dt><span class="strong">Throws:</span></dt>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Store.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Store.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Store.html
index c7c27d1..4e01eef 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Store.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/Store.html
@@ -354,151 +354,176 @@
 <span class="sourceLineNo">346</span>  int getStorefilesCount();<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>   * @return The size of the store files, in bytes, uncompressed.<a name="line.349"></a>
+<span class="sourceLineNo">349</span>   * @return Max age of store files in this store<a name="line.349"></a>
 <span class="sourceLineNo">350</span>   */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  long getStoreSizeUncompressed();<a name="line.351"></a>
+<span class="sourceLineNo">351</span>  long getMaxStoreFileAge();<a name="line.351"></a>
 <span class="sourceLineNo">352</span><a name="line.352"></a>
 <span class="sourceLineNo">353</span>  /**<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   * @return The size of the store files, in bytes.<a name="line.354"></a>
+<span class="sourceLineNo">354</span>   * @return Min age of store files in this store<a name="line.354"></a>
 <span class="sourceLineNo">355</span>   */<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  long getStorefilesSize();<a name="line.356"></a>
+<span class="sourceLineNo">356</span>  long getMinStoreFileAge();<a name="line.356"></a>
 <span class="sourceLineNo">357</span><a name="line.357"></a>
 <span class="sourceLineNo">358</span>  /**<a name="line.358"></a>
-<span class="sourceLineNo">359</span>   * @return The size of the store file indexes, in bytes.<a name="line.359"></a>
+<span class="sourceLineNo">359</span>   *  @return Average age of store files in this store, 0 if no store files<a name="line.359"></a>
 <span class="sourceLineNo">360</span>   */<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  long getStorefilesIndexSize();<a name="line.361"></a>
+<span class="sourceLineNo">361</span>  long getAvgStoreFileAge();<a name="line.361"></a>
 <span class="sourceLineNo">362</span><a name="line.362"></a>
 <span class="sourceLineNo">363</span>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Returns the total size of all index blocks in the data block indexes, including the root level,<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * intermediate levels, and the leaf level for multi-level indexes, or just the root level for<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * single-level indexes.<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * @return the total size of block indexes in the store<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   */<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  long getTotalStaticIndexSize();<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>   * Returns the total byte size of all Bloom filter bit arrays. For compound Bloom filters even the<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * Bloom blocks currently not loaded into the block cache are counted.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @return the total size of all Bloom filters in the store<a name="line.374"></a>
+<span class="sourceLineNo">364</span>   *  @return Number of reference files in this store<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  long getNumReferenceFiles();<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>   *  @return Number of HFiles in this store<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   */<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  long getNumHFiles();<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  /**<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @return The size of the store files, in bytes, uncompressed.<a name="line.374"></a>
 <span class="sourceLineNo">375</span>   */<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  long getTotalStaticBloomSize();<a name="line.376"></a>
+<span class="sourceLineNo">376</span>  long getStoreSizeUncompressed();<a name="line.376"></a>
 <span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  // Test-helper methods<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
-<span class="sourceLineNo">381</span>   * Used for tests.<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * @return cache configuration for this Store.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  CacheConfig getCacheConfig();<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>  /**<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * @return the parent region info hosting this store<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   */<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  HRegionInfo getRegionInfo();<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.391"></a>
-<span class="sourceLineNo">392</span><a name="line.392"></a>
-<span class="sourceLineNo">393</span>  boolean areWritesEnabled();<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>   * @return The smallest mvcc readPoint across all the scanners in this<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * region. Writes older than this readPoint, are included  in every<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * read operation.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  long getSmallestReadPoint();<a name="line.400"></a>
-<span class="sourceLineNo">401</span><a name="line.401"></a>
-<span class="sourceLineNo">402</span>  String getColumnFamilyName();<a name="line.402"></a>
-<span class="sourceLineNo">403</span><a name="line.403"></a>
-<span class="sourceLineNo">404</span>  TableName getTableName();<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>   * @return The number of cells flushed to disk<a name="line.407"></a>
+<span class="sourceLineNo">378</span>  /**<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   * @return The size of the store files, in bytes.<a name="line.379"></a>
+<span class="sourceLineNo">380</span>   */<a name="line.380"></a>
+<span class="sourceLineNo">381</span>  long getStorefilesSize();<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>  /**<a name="line.383"></a>
+<span class="sourceLineNo">384</span>   * @return The size of the store file indexes, in bytes.<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   */<a name="line.385"></a>
+<span class="sourceLineNo">386</span>  long getStorefilesIndexSize();<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>  /**<a name="line.388"></a>
+<span class="sourceLineNo">389</span>   * Returns the total size of all index blocks in the data block indexes, including the root level,<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * intermediate levels, and the leaf level for multi-level indexes, or just the root level for<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * single-level indexes.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @return the total size of block indexes in the store<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   */<a name="line.393"></a>
+<span class="sourceLineNo">394</span>  long getTotalStaticIndexSize();<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  /**<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * Returns the total byte size of all Bloom filter bit arrays. For compound Bloom filters even the<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   * Bloom blocks currently not loaded into the block cache are counted.<a name="line.398"></a>
+<span class="sourceLineNo">399</span>   * @return the total size of all Bloom filters in the store<a name="line.399"></a>
+<span class="sourceLineNo">400</span>   */<a name="line.400"></a>
+<span class="sourceLineNo">401</span>  long getTotalStaticBloomSize();<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>  // Test-helper methods<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>   * Used for tests.<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   * @return cache configuration for this Store.<a name="line.407"></a>
 <span class="sourceLineNo">408</span>   */<a name="line.408"></a>
-<span class="sourceLineNo">409</span>  long getFlushedCellsCount();<a name="line.409"></a>
+<span class="sourceLineNo">409</span>  CacheConfig getCacheConfig();<a name="line.409"></a>
 <span class="sourceLineNo">410</span><a name="line.410"></a>
 <span class="sourceLineNo">411</span>  /**<a name="line.411"></a>
-<span class="sourceLineNo">412</span>   * @return The total size of data flushed to disk, in bytes<a name="line.412"></a>
+<span class="sourceLineNo">412</span>   * @return the parent region info hosting this store<a name="line.412"></a>
 <span class="sourceLineNo">413</span>   */<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  long getFlushedCellsSize();<a name="line.414"></a>
+<span class="sourceLineNo">414</span>  HRegionInfo getRegionInfo();<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 The number of cells processed during minor compactions<a name="line.417"></a>
-<span class="sourceLineNo">418</span>   */<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  long getCompactedCellsCount();<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  /**<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   * @return The total amount of data processed during minor compactions, in bytes<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  long getCompactedCellsSize();<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  /**<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @return The number of cells processed during major compactions<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  long getMajorCompactedCellsCount();<a name="line.429"></a>
+<span class="sourceLineNo">416</span>  RegionCoprocessorHost getCoprocessorHost();<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>  boolean areWritesEnabled();<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>   * @return The smallest mvcc readPoint across all the scanners in this<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * region. Writes older than this readPoint, are included  in every<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * read operation.<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  long getSmallestReadPoint();<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>  String getColumnFamilyName();<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  TableName getTableName();<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 total amount of data processed during major compactions, in bytes<a name="line.432"></a>
+<span class="sourceLineNo">432</span>   * @return The number of cells flushed to disk<a name="line.432"></a>
 <span class="sourceLineNo">433</span>   */<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  long getMajorCompactedCellsSize();<a name="line.434"></a>
+<span class="sourceLineNo">434</span>  long getFlushedCellsCount();<a name="line.434"></a>
 <span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  /*<a name="line.436"></a>
-<span class="sourceLineNo">437</span>   * @param o Observer who wants to know about changes in set of Readers<a name="line.437"></a>
+<span class="sourceLineNo">436</span>  /**<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * @return The total size of data flushed to disk, in bytes<a name="line.437"></a>
 <span class="sourceLineNo">438</span>   */<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  void addChangedReaderObserver(ChangedReadersObserver o);<a name="line.439"></a>
+<span class="sourceLineNo">439</span>  long getFlushedCellsSize();<a name="line.439"></a>
 <span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  /*<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * @param o Observer no longer interested in changes in set of Readers.<a name="line.442"></a>
+<span class="sourceLineNo">441</span>  /**<a name="line.441"></a>
+<span class="sourceLineNo">442</span>   * @return The number of cells processed during minor compactions<a name="line.442"></a>
 <span class="sourceLineNo">443</span>   */<a name="line.443"></a>
-<span class="sourceLineNo">444</span>  void deleteChangedReaderObserver(ChangedReadersObserver o);<a name="line.444"></a>
+<span class="sourceLineNo">444</span>  long getCompactedCellsCount();<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>   * @return Whether this store has too many store files.<a name="line.447"></a>
+<span class="sourceLineNo">447</span>   * @return The total amount of data processed during minor compactions, in bytes<a name="line.447"></a>
 <span class="sourceLineNo">448</span>   */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  boolean hasTooManyStoreFiles();<a name="line.449"></a>
+<span class="sourceLineNo">449</span>  long getCompactedCellsSize();<a name="line.449"></a>
 <span class="sourceLineNo">450</span><a name="line.450"></a>
 <span class="sourceLineNo">451</span>  /**<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   * Checks the underlying store files, and opens the files that  have not<a name="line.452"></a>
-<span class="sourceLineNo">453</span>   * been opened, and removes the store file readers for store files no longer<a name="line.453"></a>
-<span class="sourceLineNo">454</span>   * available. Mainly used by secondary region replicas to keep up to date with<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * the primary region files.<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * @throws IOException<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   */<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  void refreshStoreFiles() throws IOException;<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>   * This value can represent the degree of emergency of compaction for this store. It should be<a name="line.461"></a>
-<span class="sourceLineNo">462</span>   * greater than or equal to 0.0, any value greater than 1.0 means we have too many store files.<a name="line.462"></a>
-<span class="sourceLineNo">463</span>   * &lt;ul&gt;<a name="line.463"></a>
-<span class="sourceLineNo">464</span>   * &lt;li&gt;if getStorefilesCount &amp;lt;= getMinFilesToCompact, return 0.0&lt;/li&gt;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * &lt;li&gt;return (getStorefilesCount - getMinFilesToCompact) / (blockingFileCount -<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * getMinFilesToCompact)&lt;/li&gt;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * &lt;/ul&gt;<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   * &lt;p&gt;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * And for striped stores, we should calculate this value by the files in each stripe separately<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * and return the maximum value.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   * &lt;p&gt;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>   * It is similar to {@link #getCompactPriority()} except that it is more suitable to use in a<a name="line.472"></a>
-<span class="sourceLineNo">473</span>   * linear formula.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>   */<a name="line.474"></a>
-<span class="sourceLineNo">475</span>  double getCompactionPressure();<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>    * Replaces the store files that the store has with the given files. Mainly used by<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    * secondary region replicas to keep up to date with<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    * the primary region files.<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    * @throws IOException<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    */<a name="line.482"></a>
-<span class="sourceLineNo">483</span>  void refreshStoreFiles(Collection&lt;String&gt; newFiles) throws IOException;<a name="line.483"></a>
+<span class="sourceLineNo">452</span>   * @return The number of cells processed during major compactions<a name="line.452"></a>
+<span class="sourceLineNo">453</span>   */<a name="line.453"></a>
+<span class="sourceLineNo">454</span>  long getMajorCompactedCellsCount();<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 The total amount of data processed during major compactions, in bytes<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   */<a name="line.458"></a>
+<span class="sourceLineNo">459</span>  long getMajorCompactedCellsSize();<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>   * @param o Observer who wants to know about changes in set of Readers<a name="line.462"></a>
+<span class="sourceLineNo">463</span>   */<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  void addChangedReaderObserver(ChangedReadersObserver o);<a name="line.464"></a>
+<span class="sourceLineNo">465</span><a name="line.465"></a>
+<span class="sourceLineNo">466</span>  /*<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param o Observer no longer interested in changes in set of Readers.<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   */<a name="line.468"></a>
+<span class="sourceLineNo">469</span>  void deleteChangedReaderObserver(ChangedReadersObserver o);<a name="line.469"></a>
+<span class="sourceLineNo">470</span><a name="line.470"></a>
+<span class="sourceLineNo">471</span>  /**<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   * @return Whether this store has too many store files.<a name="line.472"></a>
+<span class="sourceLineNo">473</span>   */<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  boolean hasTooManyStoreFiles();<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>   * Checks the underlying store files, and opens the files that  have not<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * been opened, and removes the store file readers for store files no longer<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   * available. Mainly used by secondary region replicas to keep up to date with<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   * the primary region files.<a name="line.480"></a>
+<span class="sourceLineNo">481</span>   * @throws IOException<a name="line.481"></a>
+<span class="sourceLineNo">482</span>   */<a name="line.482"></a>
+<span class="sourceLineNo">483</span>  void refreshStoreFiles() throws IOException;<a name="line.483"></a>
 <span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>  void bulkLoadHFile(StoreFileInfo fileInfo) throws IOException;<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>  boolean isPrimaryReplicaStore();<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>   * Closes and archives the compacted files under this store<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   */<a name="line.491"></a>
-<span class="sourceLineNo">492</span>  void closeAndArchiveCompactedFiles() throws IOException;<a name="line.492"></a>
-<span class="sourceLineNo">493</span>}<a name="line.493"></a>
+<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
+<span class="sourceLineNo">486</span>   * This value can represent the degree of emergency of compaction for this store. It should be<a name="line.486"></a>
+<span class="sourceLineNo">487</span>   * greater than or equal to 0.0, any value greater than 1.0 means we have too many store files.<a name="line.487"></a>
+<span class="sourceLineNo">488</span>   * &lt;ul&gt;<a name="line.488"></a>
+<span class="sourceLineNo">489</span>   * &lt;li&gt;if getStorefilesCount &amp;lt;= getMinFilesToCompact, return 0.0&lt;/li&gt;<a name="line.489"></a>
+<span class="sourceLineNo">490</span>   * &lt;li&gt;return (getStorefilesCount - getMinFilesToCompact) / (blockingFileCount -<a name="line.490"></a>
+<span class="sourceLineNo">491</span>   * getMinFilesToCompact)&lt;/li&gt;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * &lt;/ul&gt;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * &lt;p&gt;<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   * And for striped stores, we should calculate this value by the files in each stripe separately<a name="line.494"></a>
+<span class="sourceLineNo">495</span>   * and return the maximum value.<a name="line.495"></a>
+<span class="sourceLineNo">496</span>   * &lt;p&gt;<a name="line.496"></a>
+<span class="sourceLineNo">497</span>   * It is similar to {@link #getCompactPriority()} except that it is more suitable to use in a<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * linear formula.<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   */<a name="line.499"></a>
+<span class="sourceLineNo">500</span>  double getCompactionPressure();<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>    * Replaces the store files that the store has with the given files. Mainly used by<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    * secondary region replicas to keep up to date with<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    * the primary region files.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    * @throws IOException<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    */<a name="line.507"></a>
+<span class="sourceLineNo">508</span>  void refreshStoreFiles(Collection&lt;String&gt; newFiles) throws IOException;<a name="line.508"></a>
+<span class="sourceLineNo">509</span><a name="line.509"></a>
+<span class="sourceLineNo">510</span>  void bulkLoadHFile(StoreFileInfo fileInfo) throws IOException;<a name="line.510"></a>
+<span class="sourceLineNo">511</span><a name="line.511"></a>
+<span class="sourceLineNo">512</span>  boolean isPrimaryReplicaStore();<a name="line.512"></a>
+<span class="sourceLineNo">513</span><a name="line.513"></a>
+<span class="sourceLineNo">514</span>  /**<a name="line.514"></a>
+<span class="sourceLineNo">515</span>   * Closes and archives the compacted files under this store<a name="line.515"></a>
+<span class="sourceLineNo">516</span>   */<a name="line.516"></a>
+<span class="sourceLineNo">517</span>  void closeAndArchiveCompactedFiles() throws IOException;<a name="line.517"></a>
+<span class="sourceLineNo">518</span>}<a name="line.518"></a>
 
 
 


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    System.err.println("

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html
index 67836f5..d7efdfe 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html
@@ -210,7 +210,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <!--   -->
 </a>
 <h3>Fields inherited from interface&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerSource</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#APPEND_KEY">APPEND_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_COUNT">BLOCK_CACHE_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_COUNT_DESC">BLOCK_CACHE_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_EVICTION_COUNT">BLOCK_CACHE_EVICTION_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_EVICTION_COUNT_DESC">BLOCK_CACHE_EVICTION_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_EXPRESS_HIT_PERCENT">BLOCK_CACHE_EXPRESS_HIT_PERCENT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_EXPRESS_HIT_P
 ERCENT_DESC">BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_FAILED_INSERTION_COUNT">BLOCK_CACHE_FAILED_INSERTION_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC">BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_FREE_DESC">BLOCK_CACHE_FREE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_FREE_SIZE">BLOCK_CACHE_FREE_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_HIT_COUNT">BLOCK_CACHE_HIT_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_HIT_COUNT_DESC">BLOCK_CACHE_HIT_COUNT_DESC</a>, <a href="../../../
 ../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_HIT_PERCENT">BLOCK_CACHE_HIT_PERCENT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_HIT_PERCENT_DESC">BLOCK_CACHE_HIT_PERCENT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_MISS_COUNT">BLOCK_CACHE_MISS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_PRIMARY_EVICTION_COUNT">BLOCK_CACHE_PRIMARY_EVICTION_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC">BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_PRIMARY_HIT_COUNT">BLOCK_CACHE_PRIMARY_HIT_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/Metr
 icsRegionServerSource.html#BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC">BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_PRIMARY_MISS_COUNT">BLOCK_CACHE_PRIMARY_MISS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_SIZE">BLOCK_CACHE_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_SIZE_DESC">BLOCK_CACHE_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_COUNT_MISS_COUNT_DESC">BLOCK_COUNT_MISS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC">BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCKED_REQUESTS_COUNT">BLOCKED_REQUESTS_COU
 NT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCKED_REQUESTS_COUNT_DESC">BLOCKED_REQUESTS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_COUNT_COMPACTED_FROM_MOB">CELLS_COUNT_COMPACTED_FROM_MOB</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_COUNT_COMPACTED_FROM_MOB_DESC">CELLS_COUNT_COMPACTED_FROM_MOB_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_COUNT_COMPACTED_TO_MOB">CELLS_COUNT_COMPACTED_TO_MOB</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_COUNT_COMPACTED_TO_MOB_DESC">CELLS_COUNT_COMPACTED_TO_MOB_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_SIZE_COMPACTED_FROM_MOB">CELLS_SIZE_COMPACTED_FROM_MOB</a>, <a href="../../../../../o
 rg/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_SIZE_COMPACTED_FROM_MOB_DESC">CELLS_SIZE_COMPACTED_FROM_MOB_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_SIZE_COMPACTED_TO_MOB">CELLS_SIZE_COMPACTED_TO_MOB</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_SIZE_COMPACTED_TO_MOB_DESC">CELLS_SIZE_COMPACTED_TO_MOB_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CHECK_MUTATE_FAILED_COUNT">CHECK_MUTATE_FAILED_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CHECK_MUTATE_FAILED_COUNT_DESC">CHECK_MUTATE_FAILED_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CHECK_MUTATE_PASSED_COUNT">CHECK_MUTATE_PASSED_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionSe
 rverSource.html#CHECK_MUTATE_PASSED_COUNT_DESC">CHECK_MUTATE_PASSED_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CLUSTER_ID_DESC">CLUSTER_ID_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CLUSTER_ID_NAME">CLUSTER_ID_NAME</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTED_CELLS">COMPACTED_CELLS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTED_CELLS_DESC">COMPACTED_CELLS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTED_CELLS_SIZE">COMPACTED_CELLS_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTED_CELLS_SIZE_DESC">COMPACTED_CELLS_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#C
 OMPACTION_QUEUE_LENGTH">COMPACTION_QUEUE_LENGTH</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTION_QUEUE_LENGTH_DESC">COMPACTION_QUEUE_LENGTH_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#DATA_SIZE_WITHOUT_WAL">DATA_SIZE_WITHOUT_WAL</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#DATA_SIZE_WITHOUT_WAL_DESC">DATA_SIZE_WITHOUT_WAL_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#DELETE_KEY">DELETE_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FILTERED_READ_REQUEST_COUNT">FILTERED_READ_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FILTERED_READ_REQUEST_COUNT_DESC">FILTERED_READ_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionse
 rver/MetricsRegionServerSource.html#FLUSH_KEY">FLUSH_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSH_QUEUE_LENGTH">FLUSH_QUEUE_LENGTH</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSH_QUEUE_LENGTH_DESC">FLUSH_QUEUE_LENGTH_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSHED_CELLS">FLUSHED_CELLS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSHED_CELLS_DESC">FLUSHED_CELLS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSHED_CELLS_SIZE">FLUSHED_CELLS_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSHED_CELLS_SIZE_DESC">FLUSHED_CELLS_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#GET_KEY">GET_KEY<
 /a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#HEDGED_READ_WINS">HEDGED_READ_WINS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#HEDGED_READ_WINS_DESC">HEDGED_READ_WINS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#HEDGED_READS">HEDGED_READS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#HEDGED_READS_DESC">HEDGED_READS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#INCREMENT_KEY">INCREMENT_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#LARGE_COMPACTION_QUEUE_LENGTH">LARGE_COMPACTION_QUEUE_LENGTH</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAJOR_COMPACTED_CELLS">MAJOR_COMPACTED_CELLS</a>, <a href="../../../../../org/apache
 /hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAJOR_COMPACTED_CELLS_DESC">MAJOR_COMPACTED_CELLS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAJOR_COMPACTED_CELLS_SIZE">MAJOR_COMPACTED_CELLS_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAJOR_COMPACTED_CELLS_SIZE_DESC">MAJOR_COMPACTED_CELLS_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MEMSTORE_SIZE">MEMSTORE_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MEMSTORE_SIZE_DESC">MEMSTORE_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#METRICS_CONTEXT">METRICS_CONTEXT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#METRICS_DESCRIPTION">METRICS_DESCRIPTION</a>, <a href="../../../../../org/apache/
 hadoop/hbase/regionserver/MetricsRegionServerSource.html#METRICS_JMX_CONTEXT">METRICS_JMX_CONTEXT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#METRICS_NAME">METRICS_NAME</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_ACCESS_COUNT">MOB_FILE_CACHE_ACCESS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_ACCESS_COUNT_DESC">MOB_FILE_CACHE_ACCESS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_COUNT">MOB_FILE_CACHE_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_COUNT_DESC">MOB_FILE_CACHE_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_EVICTED_COUNT">MOB_FILE_CACHE_EVICTED_COUNT</a>, <a hre
 f="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_EVICTED_COUNT_DESC">MOB_FILE_CACHE_EVICTED_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_HIT_PERCENT">MOB_FILE_CACHE_HIT_PERCENT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_HIT_PERCENT_DESC">MOB_FILE_CACHE_HIT_PERCENT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_MISS_COUNT">MOB_FILE_CACHE_MISS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_MISS_COUNT_DESC">MOB_FILE_CACHE_MISS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FLUSH_COUNT">MOB_FLUSH_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSou
 rce.html#MOB_FLUSH_COUNT_DESC">MOB_FLUSH_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FLUSHED_CELLS_COUNT">MOB_FLUSHED_CELLS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FLUSHED_CELLS_COUNT_DESC">MOB_FLUSHED_CELLS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FLUSHED_CELLS_SIZE">MOB_FLUSHED_CELLS_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FLUSHED_CELLS_SIZE_DESC">MOB_FLUSHED_CELLS_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_SCAN_CELLS_COUNT">MOB_SCAN_CELLS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_SCAN_CELLS_COUNT_DESC">MOB_SCAN_CELLS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/re
 gionserver/MetricsRegionServerSource.html#MOB_SCAN_CELLS_SIZE">MOB_SCAN_CELLS_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_SCAN_CELLS_SIZE_DESC">MOB_SCAN_CELLS_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MUTATE_KEY">MUTATE_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#NUMBER_OF_MUTATIONS_WITHOUT_WAL">NUMBER_OF_MUTATIONS_WITHOUT_WAL</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC">NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#PERCENT_FILES_LOCAL">PERCENT_FILES_LOCAL</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#PERCENT_FILES_LOCAL_DESC">PERCENT_FILES_LOCAL_DESC</a>, <a href="../../../../
 ../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#PERCENT_FILES_LOCAL_SECONDARY_REGIONS">PERCENT_FILES_LOCAL_SECONDARY_REGIONS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC">PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#READ_REQUEST_COUNT">READ_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#READ_REQUEST_COUNT_DESC">READ_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#REGION_COUNT">REGION_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#REGION_COUNT_DESC">REGION_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#REPLAY_KEY">REPLAY_KEY</a>, 
 <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_GET_REQUEST_COUNT">RPC_GET_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_GET_REQUEST_COUNT_DESC">RPC_GET_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_MULTI_REQUEST_COUNT">RPC_MULTI_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_MULTI_REQUEST_COUNT_DESC">RPC_MULTI_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_MUTATE_REQUEST_COUNT">RPC_MUTATE_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_MUTATE_REQUEST_COUNT_DESC">RPC_MUTATE_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC
 _SCAN_REQUEST_COUNT">RPC_SCAN_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_SCAN_REQUEST_COUNT_DESC">RPC_SCAN_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RS_START_TIME_DESC">RS_START_TIME_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RS_START_TIME_NAME">RS_START_TIME_NAME</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SCAN_NEXT_KEY">SCAN_NEXT_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SERVER_NAME_DESC">SERVER_NAME_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SERVER_NAME_NAME">SERVER_NAME_NAME</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_APPEND_DESC">SLOW_APPEND_DESC</a>, 
 <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_APPEND_KEY">SLOW_APPEND_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_DELETE_DESC">SLOW_DELETE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_DELETE_KEY">SLOW_DELETE_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_GET_DESC">SLOW_GET_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_GET_KEY">SLOW_GET_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_INCREMENT_DESC">SLOW_INCREMENT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_INCREMENT_KEY">SLOW_INCREMENT_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerS
 ource.html#SLOW_MUTATE_DESC">SLOW_MUTATE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_MUTATE_KEY">SLOW_MUTATE_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SMALL_COMPACTION_QUEUE_LENGTH">SMALL_COMPACTION_QUEUE_LENGTH</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_KEY">SPLIT_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_QUEUE_LENGTH">SPLIT_QUEUE_LENGTH</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_QUEUE_LENGTH_DESC">SPLIT_QUEUE_LENGTH_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_REQUEST_DESC">SPLIT_REQUEST_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_REQUEST_KEY">SPLIT_REQUE
 ST_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_SUCCESS_DESC">SPLIT_SUCCESS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_SUCCESS_KEY">SPLIT_SUCCESS_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STATIC_BLOOM_SIZE">STATIC_BLOOM_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STATIC_BLOOM_SIZE_DESC">STATIC_BLOOM_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STATIC_INDEX_SIZE">STATIC_INDEX_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STATIC_INDEX_SIZE_DESC">STATIC_INDEX_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STORE_COUNT">STORE_COUNT</a>, <a href="../../../../../org/apache/ha
 doop/hbase/regionserver/MetricsRegionServerSource.html#STORE_COUNT_DESC">STORE_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_COUNT">STOREFILE_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_COUNT_DESC">STOREFILE_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_INDEX_SIZE">STOREFILE_INDEX_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_INDEX_SIZE_DESC">STOREFILE_INDEX_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_SIZE">STOREFILE_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_SIZE_DESC">STOREFILE_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionSe
 rverSource.html#TOTAL_REQUEST_COUNT">TOTAL_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#TOTAL_REQUEST_COUNT_DESC">TOTAL_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#UPDATES_BLOCKED_DESC">UPDATES_BLOCKED_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#UPDATES_BLOCKED_TIME">UPDATES_BLOCKED_TIME</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WALFILE_COUNT">WALFILE_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WALFILE_COUNT_DESC">WALFILE_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WALFILE_SIZE">WALFILE_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WALFILE_SIZE_DESC">WALFILE_SI
 ZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WRITE_REQUEST_COUNT">WRITE_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WRITE_REQUEST_COUNT_DESC">WRITE_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#ZOOKEEPER_QUORUM_DESC">ZOOKEEPER_QUORUM_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#ZOOKEEPER_QUORUM_NAME">ZOOKEEPER_QUORUM_NAME</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#APPEND_KEY">APPEND_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#AVG_STORE_FILE_AGE">AVG_STORE_FILE_AGE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#AVG_STORE_FILE_AGE_DESC">AVG_STORE_FILE_AGE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_COUNT">BLOCK_CACHE_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_COUNT_DESC">BLOCK_CACHE_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_EVICTION_COUNT">BLOCK_CACHE_EVICTION_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_EVICTION_COUNT_DESC">BLOCK_CACHE_EVICTION_COUNT_DESC</a
 >, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_EXPRESS_HIT_PERCENT">BLOCK_CACHE_EXPRESS_HIT_PERCENT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC">BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_FAILED_INSERTION_COUNT">BLOCK_CACHE_FAILED_INSERTION_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC">BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_FREE_DESC">BLOCK_CACHE_FREE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_FREE_SIZE">BLOCK_CACHE_FREE_SIZE</a>, <a href="../../../../../org/ap
 ache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_HIT_COUNT">BLOCK_CACHE_HIT_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_HIT_COUNT_DESC">BLOCK_CACHE_HIT_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_HIT_PERCENT">BLOCK_CACHE_HIT_PERCENT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_HIT_PERCENT_DESC">BLOCK_CACHE_HIT_PERCENT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_MISS_COUNT">BLOCK_CACHE_MISS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_PRIMARY_EVICTION_COUNT">BLOCK_CACHE_PRIMARY_EVICTION_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_PRIMARY_EVICTIO
 N_COUNT_DESC">BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_PRIMARY_HIT_COUNT">BLOCK_CACHE_PRIMARY_HIT_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC">BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_PRIMARY_MISS_COUNT">BLOCK_CACHE_PRIMARY_MISS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_SIZE">BLOCK_CACHE_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_SIZE_DESC">BLOCK_CACHE_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_COUNT_MISS_COUNT_DESC">BLOCK_COUNT_MISS_COUNT_DESC</a>, <a href="../../../../../
 org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC">BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCKED_REQUESTS_COUNT">BLOCKED_REQUESTS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#BLOCKED_REQUESTS_COUNT_DESC">BLOCKED_REQUESTS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_COUNT_COMPACTED_FROM_MOB">CELLS_COUNT_COMPACTED_FROM_MOB</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_COUNT_COMPACTED_FROM_MOB_DESC">CELLS_COUNT_COMPACTED_FROM_MOB_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_COUNT_COMPACTED_TO_MOB">CELLS_COUNT_COMPACTED_TO_MOB</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/Metric
 sRegionServerSource.html#CELLS_COUNT_COMPACTED_TO_MOB_DESC">CELLS_COUNT_COMPACTED_TO_MOB_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_SIZE_COMPACTED_FROM_MOB">CELLS_SIZE_COMPACTED_FROM_MOB</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_SIZE_COMPACTED_FROM_MOB_DESC">CELLS_SIZE_COMPACTED_FROM_MOB_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_SIZE_COMPACTED_TO_MOB">CELLS_SIZE_COMPACTED_TO_MOB</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CELLS_SIZE_COMPACTED_TO_MOB_DESC">CELLS_SIZE_COMPACTED_TO_MOB_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CHECK_MUTATE_FAILED_COUNT">CHECK_MUTATE_FAILED_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CHECK_MUTATE
 _FAILED_COUNT_DESC">CHECK_MUTATE_FAILED_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CHECK_MUTATE_PASSED_COUNT">CHECK_MUTATE_PASSED_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CHECK_MUTATE_PASSED_COUNT_DESC">CHECK_MUTATE_PASSED_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CLUSTER_ID_DESC">CLUSTER_ID_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#CLUSTER_ID_NAME">CLUSTER_ID_NAME</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTED_CELLS">COMPACTED_CELLS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTED_CELLS_DESC">COMPACTED_CELLS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTED
 _CELLS_SIZE">COMPACTED_CELLS_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTED_CELLS_SIZE_DESC">COMPACTED_CELLS_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTION_QUEUE_LENGTH">COMPACTION_QUEUE_LENGTH</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#COMPACTION_QUEUE_LENGTH_DESC">COMPACTION_QUEUE_LENGTH_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#DATA_SIZE_WITHOUT_WAL">DATA_SIZE_WITHOUT_WAL</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#DATA_SIZE_WITHOUT_WAL_DESC">DATA_SIZE_WITHOUT_WAL_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#DELETE_KEY">DELETE_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#
 FILTERED_READ_REQUEST_COUNT">FILTERED_READ_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FILTERED_READ_REQUEST_COUNT_DESC">FILTERED_READ_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSH_KEY">FLUSH_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSH_QUEUE_LENGTH">FLUSH_QUEUE_LENGTH</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSH_QUEUE_LENGTH_DESC">FLUSH_QUEUE_LENGTH_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSHED_CELLS">FLUSHED_CELLS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSHED_CELLS_DESC">FLUSHED_CELLS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSHED_CELLS_SIZ
 E">FLUSHED_CELLS_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#FLUSHED_CELLS_SIZE_DESC">FLUSHED_CELLS_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#GET_KEY">GET_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#HEDGED_READ_WINS">HEDGED_READ_WINS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#HEDGED_READ_WINS_DESC">HEDGED_READ_WINS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#HEDGED_READS">HEDGED_READS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#HEDGED_READS_DESC">HEDGED_READS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#INCREMENT_KEY">INCREMENT_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regi
 onserver/MetricsRegionServerSource.html#LARGE_COMPACTION_QUEUE_LENGTH">LARGE_COMPACTION_QUEUE_LENGTH</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAJOR_COMPACTED_CELLS">MAJOR_COMPACTED_CELLS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAJOR_COMPACTED_CELLS_DESC">MAJOR_COMPACTED_CELLS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAJOR_COMPACTED_CELLS_SIZE">MAJOR_COMPACTED_CELLS_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAJOR_COMPACTED_CELLS_SIZE_DESC">MAJOR_COMPACTED_CELLS_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAX_STORE_FILE_AGE">MAX_STORE_FILE_AGE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MAX_STORE_FILE_AGE_DESC">MAX_STORE_FILE_AGE_DESC</a>, <
 a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MEMSTORE_SIZE">MEMSTORE_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MEMSTORE_SIZE_DESC">MEMSTORE_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#METRICS_CONTEXT">METRICS_CONTEXT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#METRICS_DESCRIPTION">METRICS_DESCRIPTION</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#METRICS_JMX_CONTEXT">METRICS_JMX_CONTEXT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#METRICS_NAME">METRICS_NAME</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MIN_STORE_FILE_AGE">MIN_STORE_FILE_AGE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRe
 gionServerSource.html#MIN_STORE_FILE_AGE_DESC">MIN_STORE_FILE_AGE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_ACCESS_COUNT">MOB_FILE_CACHE_ACCESS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_ACCESS_COUNT_DESC">MOB_FILE_CACHE_ACCESS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_COUNT">MOB_FILE_CACHE_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_COUNT_DESC">MOB_FILE_CACHE_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_EVICTED_COUNT">MOB_FILE_CACHE_EVICTED_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_EVICTED_COUNT_DESC">MOB_FILE_CACHE_EVICTED_COUNT_D
 ESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_HIT_PERCENT">MOB_FILE_CACHE_HIT_PERCENT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_HIT_PERCENT_DESC">MOB_FILE_CACHE_HIT_PERCENT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_MISS_COUNT">MOB_FILE_CACHE_MISS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_MISS_COUNT_DESC">MOB_FILE_CACHE_MISS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FLUSH_COUNT">MOB_FLUSH_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FLUSH_COUNT_DESC">MOB_FLUSH_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MO
 B_FLUSHED_CELLS_COUNT">MOB_FLUSHED_CELLS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FLUSHED_CELLS_COUNT_DESC">MOB_FLUSHED_CELLS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FLUSHED_CELLS_SIZE">MOB_FLUSHED_CELLS_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_FLUSHED_CELLS_SIZE_DESC">MOB_FLUSHED_CELLS_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_SCAN_CELLS_COUNT">MOB_SCAN_CELLS_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_SCAN_CELLS_COUNT_DESC">MOB_SCAN_CELLS_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MOB_SCAN_CELLS_SIZE">MOB_SCAN_CELLS_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/Me
 tricsRegionServerSource.html#MOB_SCAN_CELLS_SIZE_DESC">MOB_SCAN_CELLS_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#MUTATE_KEY">MUTATE_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#NUM_REFERENCE_FILES">NUM_REFERENCE_FILES</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#NUM_REFERENCE_FILES_DESC">NUM_REFERENCE_FILES_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#NUMBER_OF_MUTATIONS_WITHOUT_WAL">NUMBER_OF_MUTATIONS_WITHOUT_WAL</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC">NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#PERCENT_FILES_LOCAL">PERCENT_FILES_LOCAL</a>, <a href="../../../../../org/apache
 /hadoop/hbase/regionserver/MetricsRegionServerSource.html#PERCENT_FILES_LOCAL_DESC">PERCENT_FILES_LOCAL_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#PERCENT_FILES_LOCAL_SECONDARY_REGIONS">PERCENT_FILES_LOCAL_SECONDARY_REGIONS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC">PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#READ_REQUEST_COUNT">READ_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#READ_REQUEST_COUNT_DESC">READ_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#REGION_COUNT">REGION_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#REGION_COUNT_DESC">REGION_C
 OUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#REPLAY_KEY">REPLAY_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_GET_REQUEST_COUNT">RPC_GET_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_GET_REQUEST_COUNT_DESC">RPC_GET_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_MULTI_REQUEST_COUNT">RPC_MULTI_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_MULTI_REQUEST_COUNT_DESC">RPC_MULTI_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_MUTATE_REQUEST_COUNT">RPC_MUTATE_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_MUTATE_REQUEST_COUNT_D
 ESC">RPC_MUTATE_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_SCAN_REQUEST_COUNT">RPC_SCAN_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RPC_SCAN_REQUEST_COUNT_DESC">RPC_SCAN_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RS_START_TIME_DESC">RS_START_TIME_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#RS_START_TIME_NAME">RS_START_TIME_NAME</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SCAN_NEXT_KEY">SCAN_NEXT_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SERVER_NAME_DESC">SERVER_NAME_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SERVER_NAME_NAME">SERVER_NAME_NAME</a
 >, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_APPEND_DESC">SLOW_APPEND_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_APPEND_KEY">SLOW_APPEND_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_DELETE_DESC">SLOW_DELETE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_DELETE_KEY">SLOW_DELETE_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_GET_DESC">SLOW_GET_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_GET_KEY">SLOW_GET_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_INCREMENT_DESC">SLOW_INCREMENT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSo
 urce.html#SLOW_INCREMENT_KEY">SLOW_INCREMENT_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_MUTATE_DESC">SLOW_MUTATE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SLOW_MUTATE_KEY">SLOW_MUTATE_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SMALL_COMPACTION_QUEUE_LENGTH">SMALL_COMPACTION_QUEUE_LENGTH</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_KEY">SPLIT_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_QUEUE_LENGTH">SPLIT_QUEUE_LENGTH</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_QUEUE_LENGTH_DESC">SPLIT_QUEUE_LENGTH_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_REQUEST_DESC">SPLIT_REQUE
 ST_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_REQUEST_KEY">SPLIT_REQUEST_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_SUCCESS_DESC">SPLIT_SUCCESS_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#SPLIT_SUCCESS_KEY">SPLIT_SUCCESS_KEY</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STATIC_BLOOM_SIZE">STATIC_BLOOM_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STATIC_BLOOM_SIZE_DESC">STATIC_BLOOM_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STATIC_INDEX_SIZE">STATIC_INDEX_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STATIC_INDEX_SIZE_DESC">STATIC_INDEX_SIZE_DESC</a>, <a href="../../../../../
 org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STORE_COUNT">STORE_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STORE_COUNT_DESC">STORE_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_COUNT">STOREFILE_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_COUNT_DESC">STOREFILE_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_INDEX_SIZE">STOREFILE_INDEX_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_INDEX_SIZE_DESC">STOREFILE_INDEX_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#STOREFILE_SIZE">STOREFILE_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServe
 rSource.html#STOREFILE_SIZE_DESC">STOREFILE_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#TOTAL_REQUEST_COUNT">TOTAL_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#TOTAL_REQUEST_COUNT_DESC">TOTAL_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#UPDATES_BLOCKED_DESC">UPDATES_BLOCKED_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#UPDATES_BLOCKED_TIME">UPDATES_BLOCKED_TIME</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WALFILE_COUNT">WALFILE_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WALFILE_COUNT_DESC">WALFILE_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WALFILE_SIZE">WALF
 ILE_SIZE</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WALFILE_SIZE_DESC">WALFILE_SIZE_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WRITE_REQUEST_COUNT">WRITE_REQUEST_COUNT</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#WRITE_REQUEST_COUNT_DESC">WRITE_REQUEST_COUNT_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#ZOOKEEPER_QUORUM_DESC">ZOOKEEPER_QUORUM_DESC</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html#ZOOKEEPER_QUORUM_NAME">ZOOKEEPER_QUORUM_NAME</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="fields_inherited_from_class_org.apache.hadoop.hbase.metrics.BaseSource">


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html
index 0cc571b..f0d9e09 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html
@@ -299,1507 +299,1514 @@
 <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>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @return True if this file was made by a major compaction.<a name="line.294"></a>
+<span class="sourceLineNo">294</span>   * @return True if this is HFile.<a name="line.294"></a>
 <span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public boolean isMajorCompaction() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (this.majorCompaction == null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throw new NullPointerException("This has not been set yet");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.majorCompaction.get();<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>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return True if this file should not be part of a minor compaction.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public boolean excludeFromMinorCompaction() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    return this.excludeFromMinorCompaction;<a name="line.307"></a>
+<span class="sourceLineNo">296</span>  public boolean isHFile() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.fileInfo.isHFile(this.fileInfo.getPath());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<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>   * @return True if this file was made by a major compaction.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public boolean isMajorCompaction() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    if (this.majorCompaction == null) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      throw new NullPointerException("This has not been set yet");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return this.majorCompaction.get();<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>  /**<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return This files maximum edit sequence id.<a name="line.311"></a>
+<span class="sourceLineNo">311</span>   * @return True if this file should not be part of a minor compaction.<a name="line.311"></a>
 <span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public long getMaxSequenceId() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return this.sequenceid;<a name="line.314"></a>
+<span class="sourceLineNo">313</span>  public boolean excludeFromMinorCompaction() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return this.excludeFromMinorCompaction;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Only used by the Striped Compaction Policy<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param key<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @return value associated with the metadata key<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return metadataMap.get(key);<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Return the largest memstoreTS found across all storefiles in<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * the given list. Store files that were created by a mapreduce<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * does not yet have any store files.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long max = 0;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (StoreFile sf : sfs) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!sf.isBulkLoadResult()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        max = Math.max(max, sf.getMaxMemstoreTS());<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>    return max;<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>   * Return the highest sequence ID found across all storefiles in<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * the given list.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param sfs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * does not yet have any store files.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long max = 0;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (StoreFile sf : sfs) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return max;<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>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Check if this storefile was created by bulk load.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * explicitly turned off.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @return true if this storefile was created by bulk load.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean isBulkLoadResult() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean bulkLoadedHFile = false;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    String fileName = this.getPath().getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (startPos != -1) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      bulkLoadedHFile = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @VisibleForTesting<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public boolean isCompactedAway() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (this.reader != null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return this.reader.isCompactedAway();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  @VisibleForTesting<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public int getRefCount() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return this.reader.refCount.get();<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>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Return the timestamp at which this bulk load file was generated.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public long getBulkLoadTimestamp() {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * calculated when store file is opened.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return this.fileInfo.getHDFSBlockDistribution();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return Reader for the store file.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IOException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @see #closeReader(boolean)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    if (this.reader != null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throw new IllegalAccessError("Already open");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // Open the StoreFile.Reader<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Read in our metadata.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (b != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // since store files are distinguished by sequence id, the one half would<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // subsume the other.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.sequenceid = Bytes.toLong(b);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      if (fileInfo.isTopReference()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        this.sequenceid += 1;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (isBulkLoadResult()){<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // generate the sequenceId from the fileName<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      String fileName = this.getPath().getName();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (startPos != -1) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            fileName.indexOf('_', startPos + 6)));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        // Handle reference files as done above.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (fileInfo.isTopReference()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // have the same row key but different seqIds.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      this.reader.setBulkLoaded(true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (b != null) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (b != null) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      boolean mc = Bytes.toBoolean(b);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (this.majorCompaction == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.majorCompaction.set(mc);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      this.majorCompaction = new AtomicBoolean(false);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (cfBloomType != BloomType.NONE) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (hfileBloomType != cfBloomType) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.info("HFile Bloom filter type for "<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            + "configuration");<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (timerangeBytes != null) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    } catch (IllegalArgumentException e) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          "proceeding without", e);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.reader.timeRangeTracker = null;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // initialize so we can reuse them after reader closed.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    firstKey = reader.getFirstKey();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    lastKey = reader.getLastKey();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    comparator = reader.getComparator();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.reader;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public Reader createReader() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return createReader(false);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * @return Reader for StoreFile. creates if necessary<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @throws IOException<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    if (this.reader == null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        this.reader = open(canUseDropBehind);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (IOException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        try {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          boolean evictOnClose =<a name="line.538"></a>
-<span class="sourceLineNo">539</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.539"></a>
-<span class="sourceLineNo">540</span>          this.closeReader(evictOnClose);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        } catch (IOException ee) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        throw e;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return this.reader;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<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>   * @return Current reader.  Must call createReader first else returns null.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @see #createReader()<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public Reader getReader() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this.reader;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @throws IOException<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   */<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (this.reader != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      this.reader.close(evictOnClose);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      this.reader = null;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * Marks the status of the file as compactedAway.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public void markCompactedAway() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    if (this.reader != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      this.reader.markCompactedAway();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * Delete this file<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @throws IOException<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  public void deleteReader() throws IOException {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    boolean evictOnClose =<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.585"></a>
-<span class="sourceLineNo">586</span>    closeReader(evictOnClose);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    this.fs.delete(getPath(), true);<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>  @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public String toString() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return this.fileInfo.toString();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public String toStringDetailed() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    StringBuilder sb = new StringBuilder();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    sb.append(this.getPath().toString());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    sb.append(", isReference=").append(isReference());<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (isBulkLoadResult()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return sb.toString();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @return Whether to skip resetting the sequence id.<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      justification="Will not overflow")<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  public static class WriterBuilder {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    private final Configuration conf;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final CacheConfig cacheConf;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private final FileSystem fs;<a name="line.630"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @return This files maximum edit sequence id.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public long getMaxSequenceId() {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this.sequenceid;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * Only used by the Striped Compaction Policy<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @param key<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @return value associated with the metadata key<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return metadataMap.get(key);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<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>   * Return the largest memstoreTS found across all storefiles in<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * the given list. Store files that were created by a mapreduce<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * does not yet have any store files.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    long max = 0;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (StoreFile sf : sfs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (!sf.isBulkLoadResult()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        max = Math.max(max, sf.getMaxMemstoreTS());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return max;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Return the highest sequence ID found across all storefiles in<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * the given list.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param sfs<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * does not yet have any store files.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    long max = 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    for (StoreFile sf : sfs) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return max;<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>  /**<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * Check if this storefile was created by bulk load.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * explicitly turned off.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @return true if this storefile was created by bulk load.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean isBulkLoadResult() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    boolean bulkLoadedHFile = false;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String fileName = this.getPath().getName();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (startPos != -1) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      bulkLoadedHFile = true;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @VisibleForTesting<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  public boolean isCompactedAway() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (this.reader != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return this.reader.isCompactedAway();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return true;<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>  @VisibleForTesting<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public int getRefCount() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return this.reader.refCount.get();<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 timestamp at which this bulk load file was generated.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public long getBulkLoadTimestamp() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * calculated when store file is opened.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return this.fileInfo.getHDFSBlockDistribution();<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>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return Reader for the store file.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @throws IOException<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @see #closeReader(boolean)<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (this.reader != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      throw new IllegalAccessError("Already open");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Open the StoreFile.Reader<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // Read in our metadata.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    if (b != null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // since store files are distinguished by sequence id, the one half would<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      // subsume the other.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      this.sequenceid = Bytes.toLong(b);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      if (fileInfo.isTopReference()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        this.sequenceid += 1;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (isBulkLoadResult()){<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // generate the sequenceId from the fileName<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      String fileName = this.getPath().getName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      if (startPos != -1) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            fileName.indexOf('_', startPos + 6)));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        // Handle reference files as done above.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        if (fileInfo.isTopReference()) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      // have the same row key but different seqIds.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      this.reader.setBulkLoaded(true);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (b != null) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    if (b != null) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      boolean mc = Bytes.toBoolean(b);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      if (this.majorCompaction == null) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      } else {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        this.majorCompaction.set(mc);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      this.majorCompaction = new AtomicBoolean(false);<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>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    if (cfBloomType != BloomType.NONE) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (hfileBloomType != cfBloomType) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        LOG.info("HFile Bloom filter type for "<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            + "configuration");<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (timerangeBytes != null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IllegalArgumentException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.520"></a>
+<span class="sourceLineNo">521</span>          "proceeding without", e);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      this.reader.timeRangeTracker = null;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // initialize so we can reuse them after reader closed.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    firstKey = reader.getFirstKey();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    lastKey = reader.getLastKey();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    comparator = reader.getComparator();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return this.reader;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>  public Reader createReader() throws IOException {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    return createReader(false);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>  /**<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @return Reader for StoreFile. creates if necessary<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @throws IOException<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (this.reader == null) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        this.reader = open(canUseDropBehind);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (IOException e) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        try {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          boolean evictOnClose =<a name="line.545"></a>
+<span class="sourceLineNo">546</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.546"></a>
+<span class="sourceLineNo">547</span>          this.closeReader(evictOnClose);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        } catch (IOException ee) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        throw e;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return this.reader;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * @return Current reader.  Must call createReader first else returns null.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @see #createReader()<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   */<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public Reader getReader() {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    return this.reader;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
+<span class="sourceLineNo">564</span><a name="line.564"></a>
+<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    if (this.reader != null) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.reader.close(evictOnClose);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.reader = null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<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>  /**<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * Marks the status of the file as compactedAway.<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void markCompactedAway() {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    if (this.reader != null) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.reader.markCompactedAway();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * Delete this file<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  public void deleteReader() throws IOException {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    boolean evictOnClose =<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.592"></a>
+<span class="sourceLineNo">593</span>    closeReader(evictOnClose);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    this.fs.delete(getPath(), true);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>  @Override<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  public String toString() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return this.fileInfo.toString();<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  public String toStringDetailed() {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    StringBuilder sb = new StringBuilder();<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    sb.append(this.getPath().toString());<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    sb.append(", isReference=").append(isReference());<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    if (isBulkLoadResult()) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return sb.toString();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return Whether to skip resetting the sequence id.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return false;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
 <span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    private BloomType bloomType = BloomType.NONE;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    private long maxKeyCount = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    private Path dir;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    private Path filePath;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    private InetSocketAddress[] favoredNodes;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    private HFileContext fileContext;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        FileSystem fs) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      this.conf = conf;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.cacheConf = cacheConf;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      this.fs = fs;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    }<a name="line.645"></a>
+<span class="sourceLineNo">632</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      justification="Will not overflow")<a name="line.633"></a>
+<span class="sourceLineNo">634</span>  public static class WriterBuilder {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    private final Configuration conf;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    private final CacheConfig cacheConf;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    private final FileSystem fs;<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    private BloomType bloomType = BloomType.NONE;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    private long maxKeyCount = 0;<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    private Path dir;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    private Path filePath;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    private InetSocketAddress[] favoredNodes;<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    private HFileContext fileContext;<a name="line.645"></a>
 <span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * @param dir Path to column family directory. The directory is created if<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *          does not exist. The file is given a unique name within this<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     *          directory.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     * @return this (for chained invocation)<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      Preconditions.checkNotNull(dir);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.dir = dir;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return this;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @param filePath the StoreFile path to write<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * @return this (for chained invocation)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     */<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      Preconditions.checkNotNull(filePath);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      this.filePath = filePath;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      return this;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    /**<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     * @return this (for chained invocation)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      this.favoredNodes = favoredNodes;<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      return this;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      Preconditions.checkNotNull(comparator);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      this.comparator = comparator;<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      return this;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      Preconditions.checkNotNull(bloomType);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      this.bloomType = bloomType;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      return this;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>    /**<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * @return this (for chained invocation)<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      this.maxKeyCount = maxKeyCount;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      return this;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      this.fileContext = fileContext;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      return this;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      return this;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    /**<a name="line.710"></a>
-<span class="sourceLineNo">711</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.711"></a>
-<span class="sourceLineNo">712</span>     * done. If metadata, add BEFORE closing using<a name="line.712"></a>
-<span class="sourceLineNo">713</span>     * {@link Writer#appendMetadata}.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>     */<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    public Writer build() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            "or file path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>      if (dir == null) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        dir = filePath.getParent();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>      if (!fs.exists(dir)) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        fs.mkdirs(dir);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (filePath == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        filePath = getUniqueFile(fs, dir);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        if (!BloomFilterFactory.isGeneralBloomEnabled(conf)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>          bloomType = BloomType.NONE;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">647</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        FileSystem fs) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.conf = conf;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      this.cacheConf = cacheConf;<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      this.fs = fs;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * @param dir Path to column family directory. The directory is created if<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     *          does not exist. The file is given a unique name within this<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *          directory.<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     * @return this (for chained invocation)<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      Preconditions.checkNotNull(dir);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.dir = dir;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      return this;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span>    /**<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * @param filePath the StoreFile path to write<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     * @return this (for chained invocation)<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      Preconditions.checkNotNull(filePath);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      this.filePath = filePath;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      return this;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    /**<a name="line.678"></a>
+<span class="sourceLineNo">679</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.679"></a>
+<span class="sourceLineNo">680</span>     * @return this (for chained invocation)<a name="line.680"></a>
+<span class="sourceLineNo">681</span>     */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      this.favoredNodes = favoredNodes;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      return this;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      Preconditions.checkNotNull(comparator);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      this.comparator = comparator;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      return this;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      Preconditions.checkNotNull(bloomType);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      this.bloomType = bloomType;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return this;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    /**<a name="line.699"></a>
+<span class="sourceLineNo">700</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.700"></a>
+<span class="sourceLineNo">701</span>     * @return this (for chained invocation)<a name="line.701"></a>
+<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      this.maxKeyCount = maxKeyCount;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return this;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      this.fileContext = fileContext;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      return this;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return this;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.718"></a>
+<span class="sourceLineNo">719</span>     * done. If metadata, add BEFORE closing using<a name="line.719"></a>
+<span class="sourceLineNo">720</span>     * {@link Writer#appendMetadata}.<a name="line.720"></a>
+<span class="sourceLineNo">721</span>     */<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    public Writer build() throws IOException {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.724"></a>
+<span class="sourceLineNo">725</span>            "or file path");<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (dir == null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        dir = filePath.getParent();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (!fs.exists(dir)) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        fs.mkdirs(dir);<a name="line.733"></a>
 <span class="sourceLineNo">734</span>      }<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (comparator == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        comparator = CellComparator.COMPARATOR;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      return new Writer(fs, filePath,<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          conf, cacheConf, comparator, bloomType, maxKeyCount, favoredNodes, fileContext);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  /**<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @param fs<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param dir Directory to create file in.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return random filename inside passed &lt;code&gt;dir&lt;/code&gt;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  public static Path getUniqueFile(final FileSystem fs, final Path dir)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throws IOException {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    if (!fs.getFileStatus(dir).isDirectory()) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new IOException("Expecting " + dir.toString() +<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        " to be a directory");<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return new Path(dir, UUID.randomUUID().toString().replaceAll("-", ""));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  public Long getMinimumTimestamp() {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return (getReader().timeRangeTracker == null) ?<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        null :<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        getReader().timeRangeTracker.getMinimumTimestamp();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * Gets the approximate mid-point of this file that is optimal for use in splitting it.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @param comparator Comparator used to compare KVs.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @return The split point row, or null if splitting is not possible, or reader is null.<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  @SuppressWarnings("deprecation")<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  byte[] getFileSplitPoint(CellComparator comparator) throws IOException {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    if (this.reader == null) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.warn("Storefile " + this + " Reader is null; cannot get split point");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return null;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    // Get first, last, and mid keys.  Midkey is the key that starts block<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // in middle of hfile.  Has column and timestamp.  Need to return just<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // the row we want to split on as midkey.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Cell midkey = this.reader.midkey();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    if (midkey != null) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Cell firstKey = this.reader.getFirstKey();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      Cell lastKey = this.reader.getLastKey();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      // if the midkey is the same as the first or last keys, we cannot (ever) split this region.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      if (comparator.compareRows(midkey, firstKey) == 0<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          || comparator.compareRows(midkey, lastKey) == 0) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (LOG.isDebugEnabled()) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("cannot split because midkey is the same as first or last row");<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        return null;<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return CellUtil.cloneRow(midkey);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return null;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * A StoreFile writer.  Use this to read/write HBase Store Files. It is package<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * local because it is an implementation detail of the HBase regionserver.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  public static class Writer implements Compactor.CellSink {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    private final BloomFilterWriter generalBloomFilterWriter;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    private final BloomFilterWriter deleteFamilyBloomFilterWriter;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    private final BloomType bloomType;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    private byte[] lastBloomKey;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    private int lastBloomKeyOffset, lastBloomKeyLen;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    private Cell lastCell = null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    private long earliestPutTs = HConstants.LATEST_TIMESTAMP;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    private Cell lastDeleteFamilyCell = null;<a name="line.807"></a>
-<span class

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html
index 07df2e3..fa97c2e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html
@@ -122,6 +122,14 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#AVG_STORE_FILE_AGE">AVG_STORE_FILE_AGE</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#AVG_STORE_FILE_AGE_DESC">AVG_STORE_FILE_AGE_DESC</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#BLOCK_CACHE_COUNT">BLOCK_CACHE_COUNT</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
@@ -398,6 +406,14 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#MAX_STORE_FILE_AGE">MAX_STORE_FILE_AGE</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#MAX_STORE_FILE_AGE_DESC">MAX_STORE_FILE_AGE_DESC</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#MEMSTORE_SIZE">MEMSTORE_SIZE</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -430,6 +446,14 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#MIN_STORE_FILE_AGE">MIN_STORE_FILE_AGE</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#MIN_STORE_FILE_AGE_DESC">MIN_STORE_FILE_AGE_DESC</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#MOB_FILE_CACHE_ACCESS_COUNT">MOB_FILE_CACHE_ACCESS_COUNT</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -514,6 +538,14 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#NUM_REFERENCE_FILES">NUM_REFERENCE_FILES</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#NUM_REFERENCE_FILES_DESC">NUM_REFERENCE_FILES_DESC</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>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/regionserver/MetricsRegionServerSource.html#NUMBER_OF_MUTATIONS_WITHOUT_WAL">NUMBER_OF_MUTATIONS_WITHOUT_WAL</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
@@ -1090,13 +1122,93 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.STOREFILE_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
+<a name="MAX_STORE_FILE_AGE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MAX_STORE_FILE_AGE</h4>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.158">MAX_STORE_FILE_AGE</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAX_STORE_FILE_AGE">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="MIN_STORE_FILE_AGE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MIN_STORE_FILE_AGE</h4>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.159">MIN_STORE_FILE_AGE</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MIN_STORE_FILE_AGE">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="AVG_STORE_FILE_AGE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>AVG_STORE_FILE_AGE</h4>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.160">AVG_STORE_FILE_AGE</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.AVG_STORE_FILE_AGE">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="NUM_REFERENCE_FILES">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NUM_REFERENCE_FILES</h4>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.161">NUM_REFERENCE_FILES</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.NUM_REFERENCE_FILES">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="MAX_STORE_FILE_AGE_DESC">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MAX_STORE_FILE_AGE_DESC</h4>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.162">MAX_STORE_FILE_AGE_DESC</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MAX_STORE_FILE_AGE_DESC">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="MIN_STORE_FILE_AGE_DESC">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MIN_STORE_FILE_AGE_DESC</h4>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.163">MIN_STORE_FILE_AGE_DESC</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MIN_STORE_FILE_AGE_DESC">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="AVG_STORE_FILE_AGE_DESC">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>AVG_STORE_FILE_AGE_DESC</h4>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.164">AVG_STORE_FILE_AGE_DESC</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.AVG_STORE_FILE_AGE_DESC">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="NUM_REFERENCE_FILES_DESC">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>NUM_REFERENCE_FILES_DESC</h4>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.165">NUM_REFERENCE_FILES_DESC</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.NUM_REFERENCE_FILES_DESC">Constant Field Values</a></dd></dl>
+</li>
+</ul>
 <a name="STOREFILE_SIZE_DESC">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>STOREFILE_SIZE_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.158">STOREFILE_SIZE_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.166">STOREFILE_SIZE_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.STOREFILE_SIZE_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1106,7 +1218,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>TOTAL_REQUEST_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.159">TOTAL_REQUEST_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.167">TOTAL_REQUEST_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.TOTAL_REQUEST_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1116,7 +1228,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>TOTAL_REQUEST_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.160">TOTAL_REQUEST_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.168">TOTAL_REQUEST_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.TOTAL_REQUEST_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1126,7 +1238,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>READ_REQUEST_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.162">READ_REQUEST_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.170">READ_REQUEST_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.READ_REQUEST_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1136,7 +1248,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>READ_REQUEST_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.163">READ_REQUEST_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.171">READ_REQUEST_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.READ_REQUEST_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1146,7 +1258,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>FILTERED_READ_REQUEST_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.165">FILTERED_READ_REQUEST_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.173">FILTERED_READ_REQUEST_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FILTERED_READ_REQUEST_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1156,7 +1268,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>FILTERED_READ_REQUEST_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.166">FILTERED_READ_REQUEST_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.174">FILTERED_READ_REQUEST_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FILTERED_READ_REQUEST_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1166,7 +1278,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>WRITE_REQUEST_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.168">WRITE_REQUEST_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.176">WRITE_REQUEST_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.WRITE_REQUEST_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1176,7 +1288,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>WRITE_REQUEST_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.169">WRITE_REQUEST_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.177">WRITE_REQUEST_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.WRITE_REQUEST_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1186,7 +1298,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>CHECK_MUTATE_FAILED_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.171">CHECK_MUTATE_FAILED_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.179">CHECK_MUTATE_FAILED_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.CHECK_MUTATE_FAILED_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1196,7 +1308,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>CHECK_MUTATE_FAILED_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.172">CHECK_MUTATE_FAILED_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.180">CHECK_MUTATE_FAILED_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.CHECK_MUTATE_FAILED_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1206,7 +1318,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>CHECK_MUTATE_PASSED_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.174">CHECK_MUTATE_PASSED_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.182">CHECK_MUTATE_PASSED_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.CHECK_MUTATE_PASSED_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1216,7 +1328,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>CHECK_MUTATE_PASSED_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.175">CHECK_MUTATE_PASSED_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.183">CHECK_MUTATE_PASSED_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.CHECK_MUTATE_PASSED_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1226,7 +1338,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>STOREFILE_INDEX_SIZE</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.177">STOREFILE_INDEX_SIZE</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.185">STOREFILE_INDEX_SIZE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.STOREFILE_INDEX_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1236,7 +1348,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>STOREFILE_INDEX_SIZE_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.178">STOREFILE_INDEX_SIZE_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.186">STOREFILE_INDEX_SIZE_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.STOREFILE_INDEX_SIZE_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1246,7 +1358,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>STATIC_INDEX_SIZE</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.179">STATIC_INDEX_SIZE</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.187">STATIC_INDEX_SIZE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.STATIC_INDEX_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1256,7 +1368,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>STATIC_INDEX_SIZE_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.180">STATIC_INDEX_SIZE_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.188">STATIC_INDEX_SIZE_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.STATIC_INDEX_SIZE_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1266,7 +1378,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>STATIC_BLOOM_SIZE</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.181">STATIC_BLOOM_SIZE</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.189">STATIC_BLOOM_SIZE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.STATIC_BLOOM_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1276,7 +1388,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>STATIC_BLOOM_SIZE_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.182">STATIC_BLOOM_SIZE_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.190">STATIC_BLOOM_SIZE_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.STATIC_BLOOM_SIZE_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1286,7 +1398,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>NUMBER_OF_MUTATIONS_WITHOUT_WAL</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.184">NUMBER_OF_MUTATIONS_WITHOUT_WAL</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.192">NUMBER_OF_MUTATIONS_WITHOUT_WAL</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.NUMBER_OF_MUTATIONS_WITHOUT_WAL">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1296,7 +1408,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.185">NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.193">NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1306,7 +1418,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>DATA_SIZE_WITHOUT_WAL</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.187">DATA_SIZE_WITHOUT_WAL</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.195">DATA_SIZE_WITHOUT_WAL</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.DATA_SIZE_WITHOUT_WAL">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1316,7 +1428,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>DATA_SIZE_WITHOUT_WAL_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.188">DATA_SIZE_WITHOUT_WAL_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.196">DATA_SIZE_WITHOUT_WAL_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.DATA_SIZE_WITHOUT_WAL_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1326,7 +1438,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>PERCENT_FILES_LOCAL</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.190">PERCENT_FILES_LOCAL</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.198">PERCENT_FILES_LOCAL</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.PERCENT_FILES_LOCAL">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1336,7 +1448,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>PERCENT_FILES_LOCAL_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.191">PERCENT_FILES_LOCAL_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.199">PERCENT_FILES_LOCAL_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.PERCENT_FILES_LOCAL_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1346,7 +1458,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>PERCENT_FILES_LOCAL_SECONDARY_REGIONS</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.193">PERCENT_FILES_LOCAL_SECONDARY_REGIONS</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.201">PERCENT_FILES_LOCAL_SECONDARY_REGIONS</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.PERCENT_FILES_LOCAL_SECONDARY_REGIONS">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1356,7 +1468,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.194">PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.202">PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1366,7 +1478,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>SPLIT_QUEUE_LENGTH</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.196">SPLIT_QUEUE_LENGTH</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.204">SPLIT_QUEUE_LENGTH</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.SPLIT_QUEUE_LENGTH">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1376,7 +1488,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>SPLIT_QUEUE_LENGTH_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.197">SPLIT_QUEUE_LENGTH_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.205">SPLIT_QUEUE_LENGTH_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.SPLIT_QUEUE_LENGTH_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1386,7 +1498,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>COMPACTION_QUEUE_LENGTH</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.198">COMPACTION_QUEUE_LENGTH</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.206">COMPACTION_QUEUE_LENGTH</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_QUEUE_LENGTH">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1396,7 +1508,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>LARGE_COMPACTION_QUEUE_LENGTH</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.199">LARGE_COMPACTION_QUEUE_LENGTH</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.207">LARGE_COMPACTION_QUEUE_LENGTH</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.LARGE_COMPACTION_QUEUE_LENGTH">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1406,7 +1518,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>SMALL_COMPACTION_QUEUE_LENGTH</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.200">SMALL_COMPACTION_QUEUE_LENGTH</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.208">SMALL_COMPACTION_QUEUE_LENGTH</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.SMALL_COMPACTION_QUEUE_LENGTH">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1416,7 +1528,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>COMPACTION_QUEUE_LENGTH_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.201">COMPACTION_QUEUE_LENGTH_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.209">COMPACTION_QUEUE_LENGTH_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.COMPACTION_QUEUE_LENGTH_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1426,7 +1538,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>FLUSH_QUEUE_LENGTH</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.202">FLUSH_QUEUE_LENGTH</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.210">FLUSH_QUEUE_LENGTH</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSH_QUEUE_LENGTH">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1436,7 +1548,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>FLUSH_QUEUE_LENGTH_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.203">FLUSH_QUEUE_LENGTH_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.211">FLUSH_QUEUE_LENGTH_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.FLUSH_QUEUE_LENGTH_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1446,7 +1558,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_FREE_SIZE</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.204">BLOCK_CACHE_FREE_SIZE</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.212">BLOCK_CACHE_FREE_SIZE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_FREE_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1456,7 +1568,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_FREE_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.205">BLOCK_CACHE_FREE_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.213">BLOCK_CACHE_FREE_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_FREE_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1466,7 +1578,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.207">BLOCK_CACHE_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.215">BLOCK_CACHE_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1476,7 +1588,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.208">BLOCK_CACHE_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.216">BLOCK_CACHE_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1486,7 +1598,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_SIZE</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.209">BLOCK_CACHE_SIZE</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.217">BLOCK_CACHE_SIZE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1496,7 +1608,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_SIZE_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.210">BLOCK_CACHE_SIZE_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.218">BLOCK_CACHE_SIZE_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_SIZE_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1506,7 +1618,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_HIT_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.211">BLOCK_CACHE_HIT_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.219">BLOCK_CACHE_HIT_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_HIT_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1516,7 +1628,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_HIT_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.212">BLOCK_CACHE_HIT_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.220">BLOCK_CACHE_HIT_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_HIT_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1526,7 +1638,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_PRIMARY_HIT_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.213">BLOCK_CACHE_PRIMARY_HIT_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.221">BLOCK_CACHE_PRIMARY_HIT_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_PRIMARY_HIT_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1536,7 +1648,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.214">BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.222">BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1546,7 +1658,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_MISS_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.215">BLOCK_CACHE_MISS_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.223">BLOCK_CACHE_MISS_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_MISS_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1556,7 +1668,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_COUNT_MISS_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.216">BLOCK_COUNT_MISS_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.224">BLOCK_COUNT_MISS_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_COUNT_MISS_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1566,7 +1678,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_PRIMARY_MISS_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.218">BLOCK_CACHE_PRIMARY_MISS_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.226">BLOCK_CACHE_PRIMARY_MISS_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_PRIMARY_MISS_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1576,7 +1688,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.219">BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.227">BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1586,7 +1698,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_EVICTION_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.221">BLOCK_CACHE_EVICTION_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.229">BLOCK_CACHE_EVICTION_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_EVICTION_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1596,7 +1708,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_EVICTION_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.222">BLOCK_CACHE_EVICTION_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.230">BLOCK_CACHE_EVICTION_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_EVICTION_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1606,7 +1718,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_PRIMARY_EVICTION_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.224">BLOCK_CACHE_PRIMARY_EVICTION_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.232">BLOCK_CACHE_PRIMARY_EVICTION_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_PRIMARY_EVICTION_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1616,7 +1728,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.225">BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.233">BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1626,7 +1738,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_HIT_PERCENT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.227">BLOCK_CACHE_HIT_PERCENT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.235">BLOCK_CACHE_HIT_PERCENT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_HIT_PERCENT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1636,7 +1748,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_HIT_PERCENT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.228">BLOCK_CACHE_HIT_PERCENT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.236">BLOCK_CACHE_HIT_PERCENT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_HIT_PERCENT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1646,7 +1758,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_EXPRESS_HIT_PERCENT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.230">BLOCK_CACHE_EXPRESS_HIT_PERCENT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.238">BLOCK_CACHE_EXPRESS_HIT_PERCENT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_EXPRESS_HIT_PERCENT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1656,7 +1768,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.231">BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.239">BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1666,7 +1778,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_FAILED_INSERTION_COUNT</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.233">BLOCK_CACHE_FAILED_INSERTION_COUNT</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.241">BLOCK_CACHE_FAILED_INSERTION_COUNT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_FAILED_INSERTION_COUNT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1676,7 +1788,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.234">BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.242">BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1686,7 +1798,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>RS_START_TIME_NAME</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.236">RS_START_TIME_NAME</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.244">RS_START_TIME_NAME</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.RS_START_TIME_NAME">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1696,7 +1808,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>ZOOKEEPER_QUORUM_NAME</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.237">ZOOKEEPER_QUORUM_NAME</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.245">ZOOKEEPER_QUORUM_NAME</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.ZOOKEEPER_QUORUM_NAME">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1706,7 +1818,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>SERVER_NAME_NAME</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.238">SERVER_NAME_NAME</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.246">SERVER_NAME_NAME</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.SERVER_NAME_NAME">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1716,7 +1828,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>CLUSTER_ID_NAME</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.239">CLUSTER_ID_NAME</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.247">CLUSTER_ID_NAME</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.CLUSTER_ID_NAME">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1726,7 +1838,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>RS_START_TIME_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.240">RS_START_TIME_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.248">RS_START_TIME_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.RS_START_TIME_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1736,7 +1848,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>ZOOKEEPER_QUORUM_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.241">ZOOKEEPER_QUORUM_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.249">ZOOKEEPER_QUORUM_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.ZOOKEEPER_QUORUM_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1746,7 +1858,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>SERVER_NAME_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.242">SERVER_NAME_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.250">SERVER_NAME_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.SERVER_NAME_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1756,7 +1868,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>CLUSTER_ID_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.243">CLUSTER_ID_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.251">CLUSTER_ID_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.CLUSTER_ID_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1766,7 +1878,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>UPDATES_BLOCKED_TIME</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.244">UPDATES_BLOCKED_TIME</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.252">UPDATES_BLOCKED_TIME</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.UPDATES_BLOCKED_TIME">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1776,7 +1888,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>UPDATES_BLOCKED_DESC</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.245">UPDATES_BLOCKED_DESC</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.253">UPDATES_BLOCKED_DESC</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.UPDATES_BLOCKED_DESC">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1786,7 +1898,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>DELETE_KEY</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.247">DELETE_KEY</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.255">DELETE_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.DELETE_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1796,7 +1908,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>GET_KEY</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.248">GET_KEY</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.256">GET_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.GET_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1806,7 +1918,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>INCREMENT_KEY</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.249">INCREMENT_KEY</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.257">INCREMENT_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.INCREMENT_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1816,7 +1928,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>MUTATE_KEY</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.250">MUTATE_KEY</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.258">MUTATE_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.MUTATE_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1826,7 +1938,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>APPEND_KEY</h4>
-<pre>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/regionserver/MetricsRegionServerSource.html#line.251">APPEND_KEY</a></pre>
+<pre>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/regionserver/MetricsRegionServerSource.html#line.259">APPEND_KEY</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.APPEND_KEY">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -1836,7 +1948,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLAY_KEY</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/ja

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
index 4504336..bda4d11 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -1896,495 +1896,578 @@
 <span class="sourceLineNo">1888</span>  }<a name="line.1888"></a>
 <span class="sourceLineNo">1889</span><a name="line.1889"></a>
 <span class="sourceLineNo">1890</span>  @Override<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>  public long getStoreSizeUncompressed() {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>    return this.totalUncompressedBytes;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>  }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span><a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>  @Override<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>  public long getStorefilesSize() {<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    long size = 0;<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      StoreFile.Reader r = s.getReader();<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      if (r == null) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        continue;<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      size += r.length();<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>    }<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>    return size;<a name="line.1906"></a>
+<span class="sourceLineNo">1891</span>  public long getMaxStoreFileAge() {<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>    long earliestTS = Long.MAX_VALUE;<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      StoreFile.Reader r = s.getReader();<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      if (r == null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>        continue;<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>      }<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>      if (!s.isHFile()) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>        continue;<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>      long createdTS = s.getFileInfo().getCreatedTimestamp();<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>      earliestTS = (createdTS &lt; earliestTS) ? createdTS : earliestTS;<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>    }<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>    return now - earliestTS;<a name="line.1906"></a>
 <span class="sourceLineNo">1907</span>  }<a name="line.1907"></a>
 <span class="sourceLineNo">1908</span><a name="line.1908"></a>
 <span class="sourceLineNo">1909</span>  @Override<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>  public long getStorefilesIndexSize() {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    long size = 0;<a name="line.1911"></a>
+<span class="sourceLineNo">1910</span>  public long getMinStoreFileAge() {<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>    long latestTS = 0;<a name="line.1911"></a>
 <span class="sourceLineNo">1912</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1912"></a>
 <span class="sourceLineNo">1913</span>      StoreFile.Reader r = s.getReader();<a name="line.1913"></a>
 <span class="sourceLineNo">1914</span>      if (r == null) {<a name="line.1914"></a>
 <span class="sourceLineNo">1915</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1915"></a>
 <span class="sourceLineNo">1916</span>        continue;<a name="line.1916"></a>
 <span class="sourceLineNo">1917</span>      }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      size += r.indexSize();<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    }<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return size;<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>  }<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span><a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>  @Override<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>  public long getTotalStaticIndexSize() {<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    long size = 0;<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      StoreFile.Reader r = s.getReader();<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      if (r == null) {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        continue;<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      size += r.getUncompressedDataIndexSize();<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    }<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>    return size;<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>  }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span><a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  @Override<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>  public long getTotalStaticBloomSize() {<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>    long size = 0;<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      StoreFile.Reader r = s.getReader();<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      if (r == null) {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        continue;<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      }<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      size += r.getTotalBloomSize();<a name="line.1944"></a>
+<span class="sourceLineNo">1918</span>      if (!s.isHFile()) {<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>        continue;<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>      }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      long createdTS = s.getFileInfo().getCreatedTimestamp();<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      latestTS = (createdTS &gt; latestTS) ? createdTS : latestTS;<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>    }<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return now - latestTS;<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  }<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span><a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>  @Override<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>  public long getAvgStoreFileAge() {<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    long sum = 0, count = 0;<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      StoreFile.Reader r = s.getReader();<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      if (r == null) {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>        continue;<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      }<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>      if (!s.isHFile()) {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>        continue;<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>      }<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      sum += s.getFileInfo().getCreatedTimestamp();<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      count++;<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    if (count == 0) {<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>      return 0;<a name="line.1944"></a>
 <span class="sourceLineNo">1945</span>    }<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    return size;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>  }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span><a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>  @Override<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>  public long getMemStoreSize() {<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    return this.memstore.size();<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>  }<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span><a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>  @Override<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>  public int getCompactPriority() {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    int priority = this.storeEngine.getStoreFileManager().getStoreCompactionPriority();<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    if (priority == PRIORITY_USER) {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>      LOG.warn("Compaction priority is USER despite there being no user compaction");<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    return priority;<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>  }<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span><a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>  @Override<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>  public boolean throttleCompaction(long compactionSize) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    return storeEngine.getCompactionPolicy().throttleCompaction(compactionSize);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>  }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span><a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  public HRegion getHRegion() {<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>    return this.region;<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span><a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>  @Override<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  public RegionCoprocessorHost getCoprocessorHost() {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>    return this.region.getCoprocessorHost();<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>  }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span><a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>  @Override<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>  public HRegionInfo getRegionInfo() {<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    return this.fs.getRegionInfo();<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  @Override<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  public boolean areWritesEnabled() {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    return this.region.areWritesEnabled();<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>  }<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span><a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>  @Override<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>  public long getSmallestReadPoint() {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    return this.region.getSmallestReadPoint();<a name="line.1989"></a>
+<span class="sourceLineNo">1946</span>    long avgTS = sum / count;<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>    return now - avgTS;<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  }<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span><a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>  @Override<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public long getNumReferenceFiles() {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    long numRefFiles = 0;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      if (s.isReference()) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        numRefFiles++;<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>      }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>    }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    return numRefFiles;<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>  }<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span><a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>  @Override<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>  public long getNumHFiles() {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>    long numHFiles = 0;<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      if (s.isHFile()) {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        numHFiles++;<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      }<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>    }<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>    return numHFiles;<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>  }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span><a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  @Override<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>  public long getStoreSizeUncompressed() {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>    return this.totalUncompressedBytes;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>  }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span><a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  @Override<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  public long getStorefilesSize() {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    long size = 0;<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>      StoreFile.Reader r = s.getReader();<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>      if (r == null) {<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        continue;<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      }<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      size += r.length();<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    return size;<a name="line.1989"></a>
 <span class="sourceLineNo">1990</span>  }<a name="line.1990"></a>
 <span class="sourceLineNo">1991</span><a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>  /**<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>   * Updates the value for the given row/family/qualifier. This function will always be seen as<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>   * atomic by other readers because it only puts a single KV to memstore. Thus no read/write<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>   * control necessary.<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>   * @param row row to update<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>   * @param f family to update<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>   * @param qualifier qualifier to update<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>   * @param newValue the new value to set into memstore<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>   * @return memstore size delta<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>   * @throws IOException<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>   */<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>  @VisibleForTesting<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>  public long updateColumnValue(byte [] row, byte [] f,<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>                                byte [] qualifier, long newValue)<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throws IOException {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span><a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    this.lock.readLock().lock();<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    try {<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span><a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>      return this.memstore.updateColumnValue(row,<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>          f,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          qualifier,<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          newValue,<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>          now);<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span><a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>    } finally {<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>      this.lock.readLock().unlock();<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    }<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>  }<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span><a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>  @Override<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>  public long upsert(Iterable&lt;Cell&gt; cells, long readpoint) throws IOException {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    this.lock.readLock().lock();<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    try {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      return this.memstore.upsert(cells, readpoint);<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>    } finally {<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      this.lock.readLock().unlock();<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>  }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span><a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>  @Override<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>  public StoreFlushContext createFlushContext(long cacheFlushId) {<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>    return new StoreFlusherImpl(cacheFlushId);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>  }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span><a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>  private final class StoreFlusherImpl implements StoreFlushContext {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span><a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    private long cacheFlushSeqNum;<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    private MemStoreSnapshot snapshot;<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    private List&lt;Path&gt; tempFiles;<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    private List&lt;Path&gt; committedFiles;<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    private long cacheFlushCount;<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private long cacheFlushSize;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span><a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    private StoreFlusherImpl(long cacheFlushSeqNum) {<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>      this.cacheFlushSeqNum = cacheFlushSeqNum;<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">1992</span>  @Override<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>  public long getStorefilesIndexSize() {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    long size = 0;<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>      StoreFile.Reader r = s.getReader();<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (r == null) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>        continue;<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>      }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>      size += r.indexSize();<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    }<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    return size;<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>  }<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span><a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>  @Override<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>  public long getTotalStaticIndexSize() {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    long size = 0;<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>      StoreFile.Reader r = s.getReader();<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      if (r == null) {<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        continue;<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      }<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>      size += r.getUncompressedDataIndexSize();<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>    }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>    return size;<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>  }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span><a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>  @Override<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  public long getTotalStaticBloomSize() {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>    long size = 0;<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>      StoreFile.Reader r = s.getReader();<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>      if (r == null) {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        continue;<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>      }<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      size += r.getTotalBloomSize();<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>    return size;<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>  }<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span><a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>  @Override<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>  public long getMemStoreSize() {<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>    return this.memstore.size();<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>  }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span><a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>  @Override<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>  public int getCompactPriority() {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    int priority = this.storeEngine.getStoreFileManager().getStoreCompactionPriority();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    if (priority == PRIORITY_USER) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      LOG.warn("Compaction priority is USER despite there being no user compaction");<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>    return priority;<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>  }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>  @Override<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  public boolean throttleCompaction(long compactionSize) {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>    return storeEngine.getCompactionPolicy().throttleCompaction(compactionSize);<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  }<a name="line.2049"></a>
 <span class="sourceLineNo">2050</span><a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    /**<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>     * This is not thread safe. The caller should have a lock on the region or the store.<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>     * If necessary, the lock can be added with the patch provided in HBASE-10087<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>     */<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>    @Override<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    public void prepare() {<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      // passing the current sequence number of the wal - to allow bookkeeping in the memstore<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      this.snapshot = memstore.snapshot(cacheFlushSeqNum);<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>      this.cacheFlushCount = snapshot.getCellsCount();<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>      this.cacheFlushSize = snapshot.getSize();<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>      committedFiles = new ArrayList&lt;Path&gt;(1);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>    }<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    @Override<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    public void flushCache(MonitoredTask status) throws IOException {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      RegionServerServices rsService = region.getRegionServerServices();<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      ThroughputController throughputController =<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>          rsService == null ? null : rsService.getFlushThroughputController();<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>      tempFiles = HStore.this.flushCache(cacheFlushSeqNum, snapshot, status, throughputController);<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>    }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    @Override<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    public boolean commit(MonitoredTask status) throws IOException {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      if (this.tempFiles == null || this.tempFiles.isEmpty()) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>        return false;<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;StoreFile&gt;(this.tempFiles.size());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      for (Path storeFilePath : tempFiles) {<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        try {<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>          storeFiles.add(HStore.this.commitFile(storeFilePath, cacheFlushSeqNum, status));<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        } catch (IOException ex) {<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>          LOG.error("Failed to commit store file " + storeFilePath, ex);<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>          // Try to delete the files we have committed before.<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>          for (StoreFile sf : storeFiles) {<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>            Path pathToDelete = sf.getPath();<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>            try {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>              sf.deleteReader();<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>            } catch (IOException deleteEx) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>              LOG.fatal("Failed to delete store file we committed, halting " + pathToDelete, ex);<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>              Runtime.getRuntime().halt(1);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>            }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          throw new IOException("Failed to commit the flush", ex);<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>        }<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      }<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span><a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>      for (StoreFile sf : storeFiles) {<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>        if (HStore.this.getCoprocessorHost() != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>          HStore.this.getCoprocessorHost().postFlush(HStore.this, sf);<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>        }<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>        committedFiles.add(sf.getPath());<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      }<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span><a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>      HStore.this.flushedCellsCount += cacheFlushCount;<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>      HStore.this.flushedCellsSize += cacheFlushSize;<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span><a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>      // Add new file to store files.  Clear snapshot too while we have the Store write lock.<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>      return HStore.this.updateStorefiles(storeFiles, snapshot.getId());<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span><a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>    @Override<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    public List&lt;Path&gt; getCommittedFiles() {<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      return committedFiles;<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    }<a name="line.2114"></a>
+<span class="sourceLineNo">2051</span>  public HRegion getHRegion() {<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>    return this.region;<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>  @Override<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>  public RegionCoprocessorHost getCoprocessorHost() {<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>    return this.region.getCoprocessorHost();<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>  }<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span><a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>  @Override<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>  public HRegionInfo getRegionInfo() {<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>    return this.fs.getRegionInfo();<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>  }<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span><a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>  @Override<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>  public boolean areWritesEnabled() {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>    return this.region.areWritesEnabled();<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>  }<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span><a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>  @Override<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>  public long getSmallestReadPoint() {<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    return this.region.getSmallestReadPoint();<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>  }<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span><a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  /**<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>   * Updates the value for the given row/family/qualifier. This function will always be seen as<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>   * atomic by other readers because it only puts a single KV to memstore. Thus no read/write<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>   * control necessary.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>   * @param row row to update<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>   * @param f family to update<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>   * @param qualifier qualifier to update<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>   * @param newValue the new value to set into memstore<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>   * @return memstore size delta<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>   * @throws IOException<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  @VisibleForTesting<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>  public long updateColumnValue(byte [] row, byte [] f,<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>                                byte [] qualifier, long newValue)<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      throws IOException {<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span><a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>    this.lock.readLock().lock();<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    try {<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span><a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      return this.memstore.updateColumnValue(row,<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>          f,<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>          qualifier,<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          newValue,<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          now);<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span><a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>    } finally {<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>      this.lock.readLock().unlock();<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>    }<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>  }<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span><a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>  @Override<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>  public long upsert(Iterable&lt;Cell&gt; cells, long readpoint) throws IOException {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>    this.lock.readLock().lock();<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>    try {<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>      return this.memstore.upsert(cells, readpoint);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>    } finally {<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>      this.lock.readLock().unlock();<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>  }<a name="line.2114"></a>
 <span class="sourceLineNo">2115</span><a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    /**<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>     * Similar to commit, but called in secondary region replicas for replaying the<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>     * flush cache from primary region. Adds the new files to the store, and drops the<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>     * snapshot depending on dropMemstoreSnapshot argument.<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>     * @param fileNames names of the flushed files<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>     * @param dropMemstoreSnapshot whether to drop the prepared memstore snapshot<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>     * @throws IOException<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>     */<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    @Override<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>    public void replayFlush(List&lt;String&gt; fileNames, boolean dropMemstoreSnapshot)<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        throws IOException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;StoreFile&gt;(fileNames.size());<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      for (String file : fileNames) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        // open the file as a store file (hfile link, etc)<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>        StoreFileInfo storeFileInfo = fs.getStoreFileInfo(getColumnFamilyName(), file);<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>        StoreFile storeFile = createStoreFileAndReader(storeFileInfo);<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>        storeFiles.add(storeFile);<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>        HStore.this.storeSize += storeFile.getReader().length();<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>        HStore.this.totalUncompressedBytes += storeFile.getReader().getTotalUncompressedBytes();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>        if (LOG.isInfoEnabled()) {<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>          LOG.info("Region: " + HStore.this.getRegionInfo().getEncodedName() +<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>            " added " + storeFile + ", entries=" + storeFile.getReader().getEntries() +<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>            ", sequenceid=" +  + storeFile.getReader().getSequenceID() +<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>            ", filesize=" + StringUtils.humanReadableInt(storeFile.getReader().length()));<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        }<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>      }<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span><a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      long snapshotId = -1; // -1 means do not drop<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>      if (dropMemstoreSnapshot &amp;&amp; snapshot != null) {<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>        snapshotId = snapshot.getId();<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>      }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      HStore.this.updateStorefiles(storeFiles, snapshotId);<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>    }<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span><a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>    /**<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>     * Abort the snapshot preparation. Drops the snapshot if any.<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>     * @throws IOException<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>     */<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>    @Override<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>    public void abort() throws IOException {<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>      if (snapshot == null) {<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>        return;<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>      }<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>      HStore.this.updateStorefiles(new ArrayList&lt;StoreFile&gt;(0), snapshot.getId());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>  }<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span><a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  @Override<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>  public boolean needsCompaction() {<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    return this.storeEngine.needsCompaction(this.filesCompacting);<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>  }<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span><a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  @Override<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  public CacheConfig getCacheConfig() {<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    return this.cacheConf;<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span><a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>  public static final long FIXED_OVERHEAD =<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>      ClassSize.align(ClassSize.OBJECT + (16 * ClassSize.REFERENCE) + (10 * Bytes.SIZEOF_LONG)<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>              + (5 * Bytes.SIZEOF_INT) + (2 * Bytes.SIZEOF_BOOLEAN));<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span><a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>  public static final long DEEP_OVERHEAD = ClassSize.align(FIXED_OVERHEAD<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>      + ClassSize.OBJECT + ClassSize.REENTRANT_LOCK<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      + ClassSize.CONCURRENT_SKIPLISTMAP<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>      + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + ClassSize.OBJECT<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      + ScanInfo.FIXED_OVERHEAD);<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span><a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>  @Override<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  public long heapSize() {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    return DEEP_OVERHEAD + this.memstore.heapSize();<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  }<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>  @Override<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>  public CellComparator getComparator() {<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>    return comparator;<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>  }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span><a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>  @Override<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  public ScanInfo getScanInfo() {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    return scanInfo;<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>  }<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span><a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>  /**<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   * Set scan info, used by test<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>   * @param scanInfo new scan info to use for test<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>  void setScanInfo(ScanInfo scanInfo) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>    this.scanInfo = scanInfo;<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>  }<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span><a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>  @Override<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>  public boolean hasTooManyStoreFiles() {<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    return getStorefilesCount() &gt; this.blockingFileCount;<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span><a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  @Override<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>  public long getFlushedCellsCount() {<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    return flushedCellsCount;<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>  }<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span><a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>  @Override<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>  public long getFlushedCellsSize() {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    return flushedCellsSize;<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  }<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span><a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  @Override<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>  public long getCompactedCellsCount() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    return compactedCellsCount;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>  }<a name="line.2224"></a>
+<span class="sourceLineNo">2116</span>  @Override<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>  public StoreFlushContext createFlushContext(long cacheFlushId) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>    return new StoreFlusherImpl(cacheFlushId);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>  }<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span><a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>  private final class StoreFlusherImpl implements StoreFlushContext {<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span><a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>    private long cacheFlushSeqNum;<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>    private MemStoreSnapshot snapshot;<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>    private List&lt;Path&gt; tempFiles;<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>    private List&lt;Path&gt; committedFiles;<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>    private long cacheFlushCount;<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    private long cacheFlushSize;<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span><a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>    private StoreFlusherImpl(long cacheFlushSeqNum) {<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>      this.cacheFlushSeqNum = cacheFlushSeqNum;<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>    /**<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>     * This is not thread safe. The caller should have a lock on the region or the store.<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>     * If necessary, the lock can be added with the patch provided in HBASE-10087<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>     */<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>    @Override<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    public void prepare() {<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      // passing the current sequence number of the wal - to allow bookkeeping in the memstore<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>      this.snapshot = memstore.snapshot(cacheFlushSeqNum);<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>      this.cacheFlushCount = snapshot.getCellsCount();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      this.cacheFlushSize = snapshot.getSize();<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>      committedFiles = new ArrayList&lt;Path&gt;(1);<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    }<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span><a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>    @Override<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>    public void flushCache(MonitoredTask status) throws IOException {<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>      RegionServerServices rsService = region.getRegionServerServices();<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>      ThroughputController throughputController =<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          rsService == null ? null : rsService.getFlushThroughputController();<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>      tempFiles = HStore.this.flushCache(cacheFlushSeqNum, snapshot, status, throughputController);<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>    }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span><a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>    @Override<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>    public boolean commit(MonitoredTask status) throws IOException {<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>      if (this.tempFiles == null || this.tempFiles.isEmpty()) {<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>        return false;<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>      }<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;StoreFile&gt;(this.tempFiles.size());<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>      for (Path storeFilePath : tempFiles) {<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>        try {<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>          storeFiles.add(HStore.this.commitFile(storeFilePath, cacheFlushSeqNum, status));<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>        } catch (IOException ex) {<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>          LOG.error("Failed to commit store file " + storeFilePath, ex);<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>          // Try to delete the files we have committed before.<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>          for (StoreFile sf : storeFiles) {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>            Path pathToDelete = sf.getPath();<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>            try {<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>              sf.deleteReader();<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>            } catch (IOException deleteEx) {<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>              LOG.fatal("Failed to delete store file we committed, halting " + pathToDelete, ex);<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>              Runtime.getRuntime().halt(1);<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>            }<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>          }<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>          throw new IOException("Failed to commit the flush", ex);<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>        }<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>      }<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span><a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>      for (StoreFile sf : storeFiles) {<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>        if (HStore.this.getCoprocessorHost() != null) {<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>          HStore.this.getCoprocessorHost().postFlush(HStore.this, sf);<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>        }<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        committedFiles.add(sf.getPath());<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>      }<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span><a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>      HStore.this.flushedCellsCount += cacheFlushCount;<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      HStore.this.flushedCellsSize += cacheFlushSize;<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>      // Add new file to store files.  Clear snapshot too while we have the Store write lock.<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>      return HStore.this.updateStorefiles(storeFiles, snapshot.getId());<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>    }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>    @Override<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>    public List&lt;Path&gt; getCommittedFiles() {<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>      return committedFiles;<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>    }<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span><a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>    /**<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>     * Similar to commit, but called in secondary region replicas for replaying the<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>     * flush cache from primary region. Adds the new files to the store, and drops the<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>     * snapshot depending on dropMemstoreSnapshot argument.<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>     * @param fileNames names of the flushed files<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>     * @param dropMemstoreSnapshot whether to drop the prepared memstore snapshot<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>     * @throws IOException<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>     */<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>    @Override<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    public void replayFlush(List&lt;String&gt; fileNames, boolean dropMemstoreSnapshot)<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>        throws IOException {<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;StoreFile&gt;(fileNames.size());<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>      for (String file : fileNames) {<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>        // open the file as a store file (hfile link, etc)<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>        StoreFileInfo storeFileInfo = fs.getStoreFileInfo(getColumnFamilyName(), file);<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>        StoreFile storeFile = createStoreFileAndReader(storeFileInfo);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>        storeFiles.add(storeFile);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        HStore.this.storeSize += storeFile.getReader().length();<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>        HStore.this.totalUncompressedBytes += storeFile.getReader().getTotalUncompressedBytes();<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        if (LOG.isInfoEnabled()) {<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>          LOG.info("Region: " + HStore.this.getRegionInfo().getEncodedName() +<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>            " added " + storeFile + ", entries=" + storeFile.getReader().getEntries() +<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            ", sequenceid=" +  + storeFile.getReader().getSequenceID() +<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            ", filesize=" + StringUtils.humanReadableInt(storeFile.getReader().length()));<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        }<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
 <span class="sourceLineNo">2225</span><a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>  @Override<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  public long getCompactedCellsSize() {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    return compactedCellsSize;<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span><a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>  @Override<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>  public long getMajorCompactedCellsCount() {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>    return majorCompactedCellsCount;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>  }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  @Override<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>  public long getMajorCompactedCellsSize() {<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>    return majorCompactedCellsSize;<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  }<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span><a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  /**<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>   * Returns the StoreEngine that is backing this concrete implementation of Store.<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>   * @return Returns the {@link StoreEngine} object used internally inside this HStore object.<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>   */<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>  @VisibleForTesting<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  public StoreEngine&lt;?, ?, ?, ?&gt; getStoreEngine() {<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    return this.storeEngine;<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  protected OffPeakHours getOffPeakHours() {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    return this.offPeakHours;<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>  }<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span><a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>  /**<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * {@inheritDoc}<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   */<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  @Override<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  public void onConfigurationChange(Configuration conf) {<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>    this.conf = new CompoundConfiguration()<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>            .add(conf)<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>            .addBytesMap(family.getValues());<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>    this.storeEngine.compactionPolicy.setConf(conf);<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>    this.offPeakHours = OffPeakHours.getInstance(conf);<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>  }<a name="line.2264"></a>
+<span class="sourceLineNo">2226</span>      long snapshotId = -1; // -1 means do not drop<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      if (dropMemstoreSnapshot &amp;&amp; snapshot != null) {<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        snapshotId = snapshot.getId();<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>      }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>      HStore.this.updateStorefiles(storeFiles, snapshotId);<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>    }<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span><a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    /**<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>     * Abort the snapshot preparation. Drops the snapshot if any.<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>     * @throws IOException<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>     */<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    @Override<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    public void abort() throws IOException {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (snapshot == null) {<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>        return;<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      }<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HStore.this.updateStorefiles(new ArrayList&lt;StoreFile&gt;(0), snapshot.getId());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    }<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>  }<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span><a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>  @Override<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>  public boolean needsCompaction() {<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>    return this.storeEngine.needsCompaction(this.filesCompacting);<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>  }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span><a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>  @Override<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  public CacheConfig getCacheConfig() {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    return this.cacheConf;<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>  }<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span><a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>  public static final long FIXED_OVERHEAD =<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>      ClassSize.align(ClassSize.OBJECT + (16 * ClassSize.REFERENCE) + (10 * Bytes.SIZEOF_LONG)<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>              + (5 * Bytes.SIZEOF_INT) + (2 * Bytes.SIZEOF_BOOLEAN));<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  public static final long DEEP_OVERHEAD = ClassSize.align(FIXED_OVERHEAD<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      + ClassSize.OBJECT + ClassSize.REENTRANT_LOCK<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>      + ClassSize.CONCURRENT_SKIPLISTMAP<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>      + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + ClassSize.OBJECT<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      + ScanInfo.FIXED_OVERHEAD);<a name="line.2264"></a>
 <span class="sourceLineNo">2265</span><a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  /**<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * {@inheritDoc}<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  @Override<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>    // No children to register<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>  }<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span><a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>  /**<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>   * {@inheritDoc}<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>  @Override<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    // No children to deregister<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>  }<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span><a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>  @Override<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>  public double getCompactionPressure() {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    return storeEngine.getStoreFileManager().getCompactionPressure();<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>  }<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span><a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>  @Override<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>  public boolean isPrimaryReplicaStore() {<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>     return getRegionInfo().getReplicaId() == HRegionInfo.DEFAULT_REPLICA_ID;<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>  }<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span><a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>  @Override<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>  public void closeAndArchiveCompactedFiles() throws IOException {<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    lock.readLock().lock();<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    Collection&lt;StoreFile&gt; copyCompactedfiles = null;<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    try {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      Collection&lt;StoreFile&gt; compactedfiles =<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          this.getStoreEngine().getStoreFileManager().getCompactedfiles();<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      if (compactedfiles != null &amp;&amp; compactedfiles.size() != 0) {<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>        // Do a copy under read lock<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        copyCompactedfiles = new ArrayList&lt;StoreFile&gt;(compactedfiles);<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      } else {<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>        if (LOG.isTraceEnabled()) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>          LOG.trace("No compacted files to archive");<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>          return;<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>        }<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      }<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>    } finally {<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      lock.readLock().unlock();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>    if (copyCompactedfiles != null &amp;&amp; !copyCompactedfiles.isEmpty()) {<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      removeCompactedfiles(copyCompactedfiles);<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    }<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>  }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span><a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>  /**<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>   * Archives and removes the compacted files<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>   * @param compactedfiles The compacted files in this store that are not active in reads<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>   * @throws IOException<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>   */<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  private void removeCompactedfiles(Collection&lt;StoreFile&gt; compactedfiles)<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      throws IOException {<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>    final List&lt;StoreFile&gt; filesToRemove = new ArrayList&lt;StoreFile&gt;(compactedfiles.size());<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    for (final StoreFile file : compactedfiles) {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      synchronized (file) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        try {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>          StoreFile.Reader r = file.getReader();<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>          if (r == null) {<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>            if (LOG.isDebugEnabled()) {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>              LOG.debug("The file " + file + " was closed but still not archived.");<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>            }<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>            filesToRemove.add(file);<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>          }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>          if (r != null &amp;&amp; r.isCompactedAway() &amp;&amp; !r.isReferencedInReads()) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>            // Even if deleting fails we need not bother as any new scanners won't be<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>            // able to use the compacted file as the status is already compactedAway<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>            if (LOG.isTraceEnabled()) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>              LOG.trace("Closing and archiving the file " + file.getPath());<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            }<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>            r.close(true);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>            // Just close and return<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>            filesToRemove.add(file);<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>          }<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        } catch (Exception e) {<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          LOG.error(<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>            "Exception while trying to close the compacted store file " + file.getPath().getName());<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>        }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>    }<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>    if (this.isPrimaryReplicaStore()) {<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      // Only the primary region is allowed to move the file to archive.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>      // The secondary region does not move the files to archive. Any active reads from<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      // the secondary region will still work because the file as such has active readers on it.<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>      if (!filesToRemove.isEmpty()) {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        if (LOG.isDebugEnabled()) {<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>          LOG.debug("Moving the files " + filesToRemove + " to archive");<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>        }<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>        // Only if this is successful it has to be removed<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>        this.fs.removeStoreFiles(this.getFamily().getNameAsString(), filesToRemove);<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>      }<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    }<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (!filesToRemove.isEmpty()) {<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>      // Clear the compactedfiles from the store file manager<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>      clearCompactedfiles(filesToRemove);<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    }<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>  }<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span><a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>  private void clearCompactedfiles(final List&lt;StoreFile&gt; filesToRemove) throws IOException {<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    if (LOG.isTraceEnabled()) {<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      LOG.trace("Clearing the compacted file " + filesToRemove + " from this store");<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    }<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    try {<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>      lock.writeLock().lock();<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>      this.getStoreEngine().getStoreFileManager().removeCompactedFiles(filesToRemove);<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    } finally {<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>      lock.writeLock().unlock();<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>    }<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>  }<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>}<a name="line.2379"></a>
+<span class="sourceLineNo">2266</span>  @Override<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>  public long heapSize() {<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>    return DEEP_OVERHEAD + this.memstore.heapSize();<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>  }<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span><a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>  @Override<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>  public CellComparator getComparator() {<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    return comparator;<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>  }<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span><a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>  @Override<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  public ScanInfo getScanInfo() {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    return scanInfo;<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span><a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>  /**<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * Set scan info, used by test<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * @param scanInfo new scan info to use for test<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  void setScanInfo(ScanInfo scanInfo) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    this.scanInfo = scanInfo;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>  }<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span><a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>  @Override<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>  public boolean hasTooManyStoreFiles() {<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    return getStorefilesCount() &gt; this.blockingFileCount;<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>  }<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span><a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>  @Override<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  public long getFlushedCellsCount() {<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    return flushedCellsCount;<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>  }<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span><a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>  @Override<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>  public long getFlushedCellsSize() {<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>    return flushedCellsSize;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>  }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span><a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>  @Override<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>  public long getCompactedCellsCount() {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>    return compactedCellsCount;<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>  }<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span><a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>  @Override<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>  public long getCompactedCellsSize() {<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>    return compactedCellsSize;<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>  }<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span><a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>  @Override<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>  public long getMajorCompactedCellsCount() {<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    return majorCompactedCellsCount;<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span><a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>  @Override<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>  public long getMajorCompactedCellsSize() {<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>    return majorCompactedCellsSize;<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>  }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span><a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>  /**<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>   * Returns the StoreEngine that is backing this concrete implementation of Store.<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>   * @return Returns the {@link StoreEngine} object used internally inside this HStore object.<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>   */<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>  @VisibleForTesting<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  public StoreEngine&lt;?, ?, ?, ?&gt; getStoreEngine() {<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>    return this.storeEngine;<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  }<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span><a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>  protected OffPeakHours getOffPeakHours() {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    return this.offPeakHours;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>  }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span><a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>  /**<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>   * {@inheritDoc}<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>   */<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>  @Override<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>  public void onConfigurationChange(Configuration conf) {<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>    this.conf = new CompoundConfiguration()<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            .add(conf)<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>            .addBytesMap(family.getValues());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>    this.storeEngine.compactionPolicy.setConf(conf);<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>    this.offPeakHours = OffPeakHours.getInstance(conf);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>  }<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span><a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>  /**<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>   * {@inheritDoc}<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>   */<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>  @Override<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>    // No children to register<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>  }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span><a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>  /**<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>   * {@inheritDoc}<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   */<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>  @Override<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>    // No children to deregister<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span><a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>  @Override<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>  public double getCompactionPressure() {<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    return storeEngine.getStoreFileManager().getCompactionPressure();<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>  }<a name="line.2368"></a>

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    System.err.println("   -e             Use table/regions

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    System.err.println("

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html
index 0cc571b..f0d9e09 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html
@@ -299,1507 +299,1514 @@
 <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>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @return True if this file was made by a major compaction.<a name="line.294"></a>
+<span class="sourceLineNo">294</span>   * @return True if this is HFile.<a name="line.294"></a>
 <span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public boolean isMajorCompaction() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (this.majorCompaction == null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throw new NullPointerException("This has not been set yet");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.majorCompaction.get();<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>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return True if this file should not be part of a minor compaction.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public boolean excludeFromMinorCompaction() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    return this.excludeFromMinorCompaction;<a name="line.307"></a>
+<span class="sourceLineNo">296</span>  public boolean isHFile() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.fileInfo.isHFile(this.fileInfo.getPath());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<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>   * @return True if this file was made by a major compaction.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public boolean isMajorCompaction() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    if (this.majorCompaction == null) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      throw new NullPointerException("This has not been set yet");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return this.majorCompaction.get();<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>  /**<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return This files maximum edit sequence id.<a name="line.311"></a>
+<span class="sourceLineNo">311</span>   * @return True if this file should not be part of a minor compaction.<a name="line.311"></a>
 <span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public long getMaxSequenceId() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return this.sequenceid;<a name="line.314"></a>
+<span class="sourceLineNo">313</span>  public boolean excludeFromMinorCompaction() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return this.excludeFromMinorCompaction;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Only used by the Striped Compaction Policy<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param key<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @return value associated with the metadata key<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return metadataMap.get(key);<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Return the largest memstoreTS found across all storefiles in<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * the given list. Store files that were created by a mapreduce<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * does not yet have any store files.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long max = 0;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (StoreFile sf : sfs) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!sf.isBulkLoadResult()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        max = Math.max(max, sf.getMaxMemstoreTS());<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>    return max;<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>   * Return the highest sequence ID found across all storefiles in<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * the given list.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param sfs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * does not yet have any store files.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long max = 0;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (StoreFile sf : sfs) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return max;<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>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Check if this storefile was created by bulk load.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * explicitly turned off.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @return true if this storefile was created by bulk load.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean isBulkLoadResult() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean bulkLoadedHFile = false;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    String fileName = this.getPath().getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (startPos != -1) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      bulkLoadedHFile = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @VisibleForTesting<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public boolean isCompactedAway() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (this.reader != null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return this.reader.isCompactedAway();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  @VisibleForTesting<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public int getRefCount() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return this.reader.refCount.get();<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>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Return the timestamp at which this bulk load file was generated.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public long getBulkLoadTimestamp() {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * calculated when store file is opened.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return this.fileInfo.getHDFSBlockDistribution();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return Reader for the store file.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IOException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @see #closeReader(boolean)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    if (this.reader != null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throw new IllegalAccessError("Already open");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // Open the StoreFile.Reader<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Read in our metadata.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (b != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // since store files are distinguished by sequence id, the one half would<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // subsume the other.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.sequenceid = Bytes.toLong(b);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      if (fileInfo.isTopReference()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        this.sequenceid += 1;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (isBulkLoadResult()){<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // generate the sequenceId from the fileName<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      String fileName = this.getPath().getName();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (startPos != -1) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            fileName.indexOf('_', startPos + 6)));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        // Handle reference files as done above.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (fileInfo.isTopReference()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // have the same row key but different seqIds.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      this.reader.setBulkLoaded(true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (b != null) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (b != null) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      boolean mc = Bytes.toBoolean(b);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (this.majorCompaction == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.majorCompaction.set(mc);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      this.majorCompaction = new AtomicBoolean(false);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (cfBloomType != BloomType.NONE) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (hfileBloomType != cfBloomType) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.info("HFile Bloom filter type for "<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            + "configuration");<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (timerangeBytes != null) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    } catch (IllegalArgumentException e) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          "proceeding without", e);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.reader.timeRangeTracker = null;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // initialize so we can reuse them after reader closed.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    firstKey = reader.getFirstKey();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    lastKey = reader.getLastKey();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    comparator = reader.getComparator();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.reader;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public Reader createReader() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return createReader(false);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * @return Reader for StoreFile. creates if necessary<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @throws IOException<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    if (this.reader == null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        this.reader = open(canUseDropBehind);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (IOException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        try {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          boolean evictOnClose =<a name="line.538"></a>
-<span class="sourceLineNo">539</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.539"></a>
-<span class="sourceLineNo">540</span>          this.closeReader(evictOnClose);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        } catch (IOException ee) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        throw e;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return this.reader;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<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>   * @return Current reader.  Must call createReader first else returns null.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @see #createReader()<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public Reader getReader() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this.reader;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @throws IOException<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   */<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (this.reader != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      this.reader.close(evictOnClose);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      this.reader = null;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * Marks the status of the file as compactedAway.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public void markCompactedAway() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    if (this.reader != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      this.reader.markCompactedAway();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * Delete this file<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @throws IOException<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  public void deleteReader() throws IOException {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    boolean evictOnClose =<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.585"></a>
-<span class="sourceLineNo">586</span>    closeReader(evictOnClose);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    this.fs.delete(getPath(), true);<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>  @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public String toString() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return this.fileInfo.toString();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public String toStringDetailed() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    StringBuilder sb = new StringBuilder();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    sb.append(this.getPath().toString());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    sb.append(", isReference=").append(isReference());<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (isBulkLoadResult()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return sb.toString();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @return Whether to skip resetting the sequence id.<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      justification="Will not overflow")<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  public static class WriterBuilder {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    private final Configuration conf;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final CacheConfig cacheConf;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private final FileSystem fs;<a name="line.630"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @return This files maximum edit sequence id.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public long getMaxSequenceId() {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this.sequenceid;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * Only used by the Striped Compaction Policy<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @param key<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @return value associated with the metadata key<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return metadataMap.get(key);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<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>   * Return the largest memstoreTS found across all storefiles in<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * the given list. Store files that were created by a mapreduce<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * does not yet have any store files.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    long max = 0;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (StoreFile sf : sfs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (!sf.isBulkLoadResult()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        max = Math.max(max, sf.getMaxMemstoreTS());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return max;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Return the highest sequence ID found across all storefiles in<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * the given list.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param sfs<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * does not yet have any store files.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    long max = 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    for (StoreFile sf : sfs) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return max;<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>  /**<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * Check if this storefile was created by bulk load.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * explicitly turned off.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @return true if this storefile was created by bulk load.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean isBulkLoadResult() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    boolean bulkLoadedHFile = false;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String fileName = this.getPath().getName();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (startPos != -1) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      bulkLoadedHFile = true;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @VisibleForTesting<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  public boolean isCompactedAway() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (this.reader != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return this.reader.isCompactedAway();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return true;<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>  @VisibleForTesting<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public int getRefCount() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return this.reader.refCount.get();<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 timestamp at which this bulk load file was generated.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public long getBulkLoadTimestamp() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * calculated when store file is opened.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return this.fileInfo.getHDFSBlockDistribution();<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>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return Reader for the store file.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @throws IOException<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @see #closeReader(boolean)<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (this.reader != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      throw new IllegalAccessError("Already open");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Open the StoreFile.Reader<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // Read in our metadata.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    if (b != null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // since store files are distinguished by sequence id, the one half would<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      // subsume the other.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      this.sequenceid = Bytes.toLong(b);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      if (fileInfo.isTopReference()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        this.sequenceid += 1;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (isBulkLoadResult()){<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // generate the sequenceId from the fileName<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      String fileName = this.getPath().getName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      if (startPos != -1) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            fileName.indexOf('_', startPos + 6)));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        // Handle reference files as done above.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        if (fileInfo.isTopReference()) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      // have the same row key but different seqIds.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      this.reader.setBulkLoaded(true);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (b != null) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    if (b != null) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      boolean mc = Bytes.toBoolean(b);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      if (this.majorCompaction == null) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      } else {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        this.majorCompaction.set(mc);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      this.majorCompaction = new AtomicBoolean(false);<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>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    if (cfBloomType != BloomType.NONE) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (hfileBloomType != cfBloomType) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        LOG.info("HFile Bloom filter type for "<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            + "configuration");<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (timerangeBytes != null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IllegalArgumentException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.520"></a>
+<span class="sourceLineNo">521</span>          "proceeding without", e);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      this.reader.timeRangeTracker = null;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // initialize so we can reuse them after reader closed.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    firstKey = reader.getFirstKey();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    lastKey = reader.getLastKey();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    comparator = reader.getComparator();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return this.reader;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>  public Reader createReader() throws IOException {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    return createReader(false);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>  /**<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @return Reader for StoreFile. creates if necessary<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @throws IOException<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (this.reader == null) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        this.reader = open(canUseDropBehind);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (IOException e) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        try {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          boolean evictOnClose =<a name="line.545"></a>
+<span class="sourceLineNo">546</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.546"></a>
+<span class="sourceLineNo">547</span>          this.closeReader(evictOnClose);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        } catch (IOException ee) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        throw e;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return this.reader;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * @return Current reader.  Must call createReader first else returns null.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @see #createReader()<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   */<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public Reader getReader() {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    return this.reader;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
+<span class="sourceLineNo">564</span><a name="line.564"></a>
+<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    if (this.reader != null) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.reader.close(evictOnClose);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.reader = null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<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>  /**<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * Marks the status of the file as compactedAway.<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void markCompactedAway() {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    if (this.reader != null) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.reader.markCompactedAway();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * Delete this file<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  public void deleteReader() throws IOException {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    boolean evictOnClose =<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.592"></a>
+<span class="sourceLineNo">593</span>    closeReader(evictOnClose);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    this.fs.delete(getPath(), true);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>  @Override<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  public String toString() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return this.fileInfo.toString();<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  public String toStringDetailed() {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    StringBuilder sb = new StringBuilder();<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    sb.append(this.getPath().toString());<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    sb.append(", isReference=").append(isReference());<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    if (isBulkLoadResult()) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return sb.toString();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return Whether to skip resetting the sequence id.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return false;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
 <span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    private BloomType bloomType = BloomType.NONE;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    private long maxKeyCount = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    private Path dir;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    private Path filePath;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    private InetSocketAddress[] favoredNodes;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    private HFileContext fileContext;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        FileSystem fs) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      this.conf = conf;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.cacheConf = cacheConf;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      this.fs = fs;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    }<a name="line.645"></a>
+<span class="sourceLineNo">632</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      justification="Will not overflow")<a name="line.633"></a>
+<span class="sourceLineNo">634</span>  public static class WriterBuilder {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    private final Configuration conf;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    private final CacheConfig cacheConf;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    private final FileSystem fs;<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    private BloomType bloomType = BloomType.NONE;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    private long maxKeyCount = 0;<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    private Path dir;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    private Path filePath;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    private InetSocketAddress[] favoredNodes;<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    private HFileContext fileContext;<a name="line.645"></a>
 <span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * @param dir Path to column family directory. The directory is created if<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *          does not exist. The file is given a unique name within this<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     *          directory.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     * @return this (for chained invocation)<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      Preconditions.checkNotNull(dir);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.dir = dir;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return this;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @param filePath the StoreFile path to write<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * @return this (for chained invocation)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     */<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      Preconditions.checkNotNull(filePath);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      this.filePath = filePath;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      return this;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    /**<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     * @return this (for chained invocation)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      this.favoredNodes = favoredNodes;<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      return this;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      Preconditions.checkNotNull(comparator);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      this.comparator = comparator;<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      return this;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      Preconditions.checkNotNull(bloomType);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      this.bloomType = bloomType;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      return this;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>    /**<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * @return this (for chained invocation)<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      this.maxKeyCount = maxKeyCount;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      return this;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      this.fileContext = fileContext;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      return this;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      return this;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    /**<a name="line.710"></a>
-<span class="sourceLineNo">711</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.711"></a>
-<span class="sourceLineNo">712</span>     * done. If metadata, add BEFORE closing using<a name="line.712"></a>
-<span class="sourceLineNo">713</span>     * {@link Writer#appendMetadata}.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>     */<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    public Writer build() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            "or file path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>      if (dir == null) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        dir = filePath.getParent();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>      if (!fs.exists(dir)) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        fs.mkdirs(dir);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (filePath == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        filePath = getUniqueFile(fs, dir);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        if (!BloomFilterFactory.isGeneralBloomEnabled(conf)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>          bloomType = BloomType.NONE;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">647</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        FileSystem fs) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.conf = conf;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      this.cacheConf = cacheConf;<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      this.fs = fs;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * @param dir Path to column family directory. The directory is created if<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     *          does not exist. The file is given a unique name within this<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *          directory.<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     * @return this (for chained invocation)<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      Preconditions.checkNotNull(dir);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.dir = dir;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      return this;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span>    /**<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * @param filePath the StoreFile path to write<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     * @return this (for chained invocation)<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      Preconditions.checkNotNull(filePath);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      this.filePath = filePath;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      return this;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    /**<a name="line.678"></a>
+<span class="sourceLineNo">679</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.679"></a>
+<span class="sourceLineNo">680</span>     * @return this (for chained invocation)<a name="line.680"></a>
+<span class="sourceLineNo">681</span>     */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      this.favoredNodes = favoredNodes;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      return this;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      Preconditions.checkNotNull(comparator);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      this.comparator = comparator;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      return this;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      Preconditions.checkNotNull(bloomType);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      this.bloomType = bloomType;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return this;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    /**<a name="line.699"></a>
+<span class="sourceLineNo">700</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.700"></a>
+<span class="sourceLineNo">701</span>     * @return this (for chained invocation)<a name="line.701"></a>
+<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      this.maxKeyCount = maxKeyCount;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return this;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      this.fileContext = fileContext;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      return this;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return this;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.718"></a>
+<span class="sourceLineNo">719</span>     * done. If metadata, add BEFORE closing using<a name="line.719"></a>
+<span class="sourceLineNo">720</span>     * {@link Writer#appendMetadata}.<a name="line.720"></a>
+<span class="sourceLineNo">721</span>     */<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    public Writer build() throws IOException {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.724"></a>
+<span class="sourceLineNo">725</span>            "or file path");<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (dir == null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        dir = filePath.getParent();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (!fs.exists(dir)) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        fs.mkdirs(dir);<a name="line.733"></a>
 <span class="sourceLineNo">734</span>      }<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (comparator == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        comparator = CellComparator.COMPARATOR;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      return new Writer(fs, filePath,<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          conf, cacheConf, comparator, bloomType, maxKeyCount, favoredNodes, fileContext);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  /**<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @param fs<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param dir Directory to create file in.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return random filename inside passed &lt;code&gt;dir&lt;/code&gt;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  public static Path getUniqueFile(final FileSystem fs, final Path dir)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throws IOException {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    if (!fs.getFileStatus(dir).isDirectory()) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new IOException("Expecting " + dir.toString() +<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        " to be a directory");<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return new Path(dir, UUID.randomUUID().toString().replaceAll("-", ""));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  public Long getMinimumTimestamp() {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return (getReader().timeRangeTracker == null) ?<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        null :<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        getReader().timeRangeTracker.getMinimumTimestamp();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * Gets the approximate mid-point of this file that is optimal for use in splitting it.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @param comparator Comparator used to compare KVs.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @return The split point row, or null if splitting is not possible, or reader is null.<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  @SuppressWarnings("deprecation")<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  byte[] getFileSplitPoint(CellComparator comparator) throws IOException {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    if (this.reader == null) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.warn("Storefile " + this + " Reader is null; cannot get split point");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return null;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    // Get first, last, and mid keys.  Midkey is the key that starts block<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // in middle of hfile.  Has column and timestamp.  Need to return just<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // the row we want to split on as midkey.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Cell midkey = this.reader.midkey();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    if (midkey != null) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Cell firstKey = this.reader.getFirstKey();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      Cell lastKey = this.reader.getLastKey();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      // if the midkey is the same as the first or last keys, we cannot (ever) split this region.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      if (comparator.compareRows(midkey, firstKey) == 0<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          || comparator.compareRows(midkey, lastKey) == 0) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (LOG.isDebugEnabled()) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("cannot split because midkey is the same as first or last row");<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        return null;<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return CellUtil.cloneRow(midkey);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return null;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * A StoreFile writer.  Use this to read/write HBase Store Files. It is package<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * local because it is an implementation detail of the HBase regionserver.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  public static class Writer implements Compactor.CellSink {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    private final BloomFilterWriter generalBloomFilterWriter;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    private final BloomFilterWriter deleteFamilyBloomFilterWriter;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    private final BloomType bloomType;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    private byte[] lastBloomKey;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    private int lastBloomKeyOffset, lastBloomKeyLen;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    private Cell lastCell = null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    private long earliestPutTs = HConstants.LATEST_TIMESTAMP;<a name="line.806"></a>
-<span class="sourceLineNo">807</s

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.html
index 5ad93fa..b5574a2 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.html
@@ -219,40 +219,48 @@ implements org.apache.hadoop.util.Tool</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#INIT_ERROR_EXIT_CODE">INIT_ERROR_EXIT_CODE</a></strong></code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#FAILURE_EXIT_CODE">FAILURE_EXIT_CODE</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private static int</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#INIT_ERROR_EXIT_CODE">INIT_ERROR_EXIT_CODE</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#interval">interval</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.apache.commons.logging.Log</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#LOG">LOG</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#MAX_THREADS_NUM">MAX_THREADS_NUM</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#regionServerAllRegions">regionServerAllRegions</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#regionServerMode">regionServerMode</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#sink">sink</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#timeout">timeout</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/tool/Canary.html#TIMEOUT_ERROR_EXIT_CODE">TIMEOUT_ERROR_EXIT_CODE</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#treatFailureAsError">treatFailureAsError</a></strong></code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.html#USAGE_EXIT_CODE">USAGE_EXIT_CODE</a></strong></code>&nbsp;</td>
@@ -398,7 +406,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>USAGE_EXIT_CODE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.411">USAGE_EXIT_CODE</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.437">USAGE_EXIT_CODE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.USAGE_EXIT_CODE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -408,7 +416,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>INIT_ERROR_EXIT_CODE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.412">INIT_ERROR_EXIT_CODE</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.438">INIT_ERROR_EXIT_CODE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.INIT_ERROR_EXIT_CODE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -418,7 +426,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>TIMEOUT_ERROR_EXIT_CODE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.413">TIMEOUT_ERROR_EXIT_CODE</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.439">TIMEOUT_ERROR_EXIT_CODE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.TIMEOUT_ERROR_EXIT_CODE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -428,17 +436,27 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>ERROR_EXIT_CODE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.414">ERROR_EXIT_CODE</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.440">ERROR_EXIT_CODE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.ERROR_EXIT_CODE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
+<a name="FAILURE_EXIT_CODE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>FAILURE_EXIT_CODE</h4>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.441">FAILURE_EXIT_CODE</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.FAILURE_EXIT_CODE">Constant Field Values</a></dd></dl>
+</li>
+</ul>
 <a name="DEFAULT_INTERVAL">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_INTERVAL</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.416">DEFAULT_INTERVAL</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.443">DEFAULT_INTERVAL</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.DEFAULT_INTERVAL">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -448,7 +466,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_TIMEOUT</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.418">DEFAULT_TIMEOUT</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.445">DEFAULT_TIMEOUT</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.DEFAULT_TIMEOUT">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -458,7 +476,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_THREADS_NUM</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.419">MAX_THREADS_NUM</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.446">MAX_THREADS_NUM</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.MAX_THREADS_NUM">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -468,7 +486,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <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/tool/Canary.html#line.421">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.448">LOG</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_WRITE_TABLE_NAME">
@@ -477,7 +495,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WRITE_TABLE_NAME</h4>
-<pre>public static final&nbsp;<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/tool/Canary.html#line.423">DEFAULT_WRITE_TABLE_NAME</a></pre>
+<pre>public static final&nbsp;<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/tool/Canary.html#line.450">DEFAULT_WRITE_TABLE_NAME</a></pre>
 </li>
 </ul>
 <a name="CANARY_TABLE_FAMILY_NAME">
@@ -486,7 +504,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>CANARY_TABLE_FAMILY_NAME</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/tool/Canary.html#line.426">CANARY_TABLE_FAMILY_NAME</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/tool/Canary.html#line.453">CANARY_TABLE_FAMILY_NAME</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.CANARY_TABLE_FAMILY_NAME">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -496,7 +514,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <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/tool/Canary.html#line.428">conf</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.455">conf</a></pre>
 </li>
 </ul>
 <a name="interval">
@@ -505,7 +523,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>interval</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.429">interval</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.456">interval</a></pre>
 </li>
 </ul>
 <a name="sink">
@@ -514,7 +532,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>sink</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.430">sink</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.457">sink</a></pre>
 </li>
 </ul>
 <a name="useRegExp">
@@ -523,7 +541,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>useRegExp</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.432">useRegExp</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.459">useRegExp</a></pre>
 </li>
 </ul>
 <a name="timeout">
@@ -532,7 +550,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>timeout</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.433">timeout</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.460">timeout</a></pre>
 </li>
 </ul>
 <a name="failOnError">
@@ -541,7 +559,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>failOnError</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.434">failOnError</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.461">failOnError</a></pre>
 </li>
 </ul>
 <a name="regionServerMode">
@@ -550,7 +568,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerMode</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.435">regionServerMode</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.462">regionServerMode</a></pre>
 </li>
 </ul>
 <a name="regionServerAllRegions">
@@ -559,7 +577,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerAllRegions</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.436">regionServerAllRegions</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.463">regionServerAllRegions</a></pre>
 </li>
 </ul>
 <a name="writeSniffing">
@@ -568,7 +586,16 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>writeSniffing</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.437">writeSniffing</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.464">writeSniffing</a></pre>
+</li>
+</ul>
+<a name="treatFailureAsError">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>treatFailureAsError</h4>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.465">treatFailureAsError</a></pre>
 </li>
 </ul>
 <a name="writeTableName">
@@ -577,7 +604,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>writeTableName</h4>
-<pre>private&nbsp;<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/tool/Canary.html#line.438">writeTableName</a></pre>
+<pre>private&nbsp;<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/tool/Canary.html#line.466">writeTableName</a></pre>
 </li>
 </ul>
 <a name="executor">
@@ -586,7 +613,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>executor</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.440">executor</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.468">executor</a></pre>
 </li>
 </ul>
 </li>
@@ -603,7 +630,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>Canary</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.442">Canary</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.470">Canary</a>()</pre>
 </li>
 </ul>
 <a name="Canary(java.util.concurrent.ExecutorService, org.apache.hadoop.hbase.tool.Canary.Sink)">
@@ -612,7 +639,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Canary</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.446">Canary</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.474">Canary</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
       <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink)</pre>
 </li>
 </ul>
@@ -630,7 +657,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getConf</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.452">getConf</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.480">getConf</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>getConf</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.conf.Configurable</code></dd>
@@ -643,7 +670,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setConf</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.457">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.485">setConf</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>setConf</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.conf.Configurable</code></dd>
@@ -656,7 +683,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>parseArgs</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.461">parseArgs</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;args)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.489">parseArgs</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;args)</pre>
 </li>
 </ul>
 <a name="run(java.lang.String[])">
@@ -665,7 +692,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.553">run</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;args)
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.583">run</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;args)
         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><strong>Specified by:</strong></dt>
@@ -680,7 +707,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>printUsageAndExit</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.623">printUsageAndExit</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.653">printUsageAndExit</a>()</pre>
 </li>
 </ul>
 <a name="newMonitor(org.apache.hadoop.hbase.client.Connection, int, java.lang.String[])">
@@ -689,7 +716,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>newMonitor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.655">newMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.686">newMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                         int&nbsp;index,
                         <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;args)</pre>
 <div class="block">A Factory method for <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool"><code>Canary.Monitor</code></a>.
@@ -704,7 +731,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>sniff</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.925">sniff</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.972">sniff</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
          <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/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Canary entry point for specified table.</div>
@@ -718,7 +745,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>sniff</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.934">sniff</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.981">sniff</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
          <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/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a>&nbsp;taskType)
                   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>
@@ -733,7 +760,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>sniff</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="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.948">sniff</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
+<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="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.995">sniff</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
                        <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
                        <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;tableName,
                        <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
@@ -750,7 +777,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>sniff</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="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.966">sniff</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
+<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="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.1013">sniff</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
                        <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
                        <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a>&nbsp;tableDesc,
                        <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
@@ -766,7 +793,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.1187">main</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;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.1235">main</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;args)
                  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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/class-use/Canary.ExtendedSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/class-use/Canary.ExtendedSink.html b/devapidocs/org/apache/hadoop/hbase/tool/class-use/Canary.ExtendedSink.html
index 2fc3107..51ac707 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/class-use/Canary.ExtendedSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/class-use/Canary.ExtendedSink.html
@@ -133,12 +133,13 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#Canary.RegionServerMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.ExtendedSink,%20java.util.concurrent.ExecutorService,%20boolean)">Canary.RegionServerMonitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#Canary.RegionServerMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.ExtendedSink,%20java.util.concurrent.ExecutorService,%20boolean,%20boolean)">Canary.RegionServerMonitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                                     <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;monitorTargets,
                                                     boolean&nbsp;useRegExp,
                                                     <a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.ExtendedSink</a>&nbsp;sink,
                                                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
-                                                    boolean&nbsp;allRegions)</code>&nbsp;</td>
+                                                    boolean&nbsp;allRegions,
+                                                    boolean&nbsp;treatFailureAsError)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#Canary.RegionServerTask(org.apache.hadoop.hbase.client.Connection,%20java.lang.String,%20org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.tool.Canary.ExtendedSink,%20java.util.concurrent.atomic.AtomicLong)">Canary.RegionServerTask</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/class-use/Canary.Sink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/class-use/Canary.Sink.html b/devapidocs/org/apache/hadoop/hbase/tool/class-use/Canary.Sink.html
index ac8ef85..c2d21f5 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/class-use/Canary.Sink.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/class-use/Canary.Sink.html
@@ -172,20 +172,22 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#Canary.Monitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService)">Canary.Monitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#Canary.Monitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean)">Canary.Monitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                             <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;monitorTargets,
                             boolean&nbsp;useRegExp,
                             <a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
-                            <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor)</code>&nbsp;</td>
+                            <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
+                            boolean&nbsp;treatFailureAsError)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean,%20org.apache.hadoop.hbase.TableName)">Canary.RegionMonitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean,%20org.apache.hadoop.hbase.TableName,%20boolean)">Canary.RegionMonitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                         <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;monitorTargets,
                                         boolean&nbsp;useRegExp,
                                         <a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
                                         <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
                                         boolean&nbsp;writeSniffing,
-                                        <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;writeTableName)</code>&nbsp;</td>
+                                        <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;writeTableName,
+                                        boolean&nbsp;treatFailureAsError)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.html#Canary.RegionTask(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20org.apache.hadoop.hbase.tool.Canary.RegionTask.TaskType)">Canary.RegionTask</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 ee84699..a631b0a 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -461,12 +461,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.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/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/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/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PoolMap.PoolType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">ChecksumType</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/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/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="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/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>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 f00a837..8260133 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -148,9 +148,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.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/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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/metrics2/util/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/metrics2/util/package-summary.html b/devapidocs/org/apache/hadoop/metrics2/util/package-summary.html
index 9229257..cefe00c 100644
--- a/devapidocs/org/apache/hadoop/metrics2/util/package-summary.html
+++ b/devapidocs/org/apache/hadoop/metrics2/util/package-summary.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/metrics2/lib/package-summary.html">Prev Package</a></li>
-<li>Next Package</li>
+<li><a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">Next Package</a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/metrics2/util/package-summary.html" target="_top">Frames</a></li>
@@ -124,7 +124,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/metrics2/lib/package-summary.html">Prev Package</a></li>
-<li>Next Package</li>
+<li><a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">Next Package</a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/metrics2/util/package-summary.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/metrics2/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/metrics2/util/package-tree.html b/devapidocs/org/apache/hadoop/metrics2/util/package-tree.html
index e73e475..6edef5d 100644
--- a/devapidocs/org/apache/hadoop/metrics2/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/metrics2/util/package-tree.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/metrics2/lib/package-tree.html">Prev</a></li>
-<li>Next</li>
+<li><a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-tree.html">Next</a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/metrics2/util/package-tree.html" target="_top">Frames</a></li>
@@ -100,7 +100,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/metrics2/lib/package-tree.html">Prev</a></li>
-<li>Next</li>
+<li><a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-tree.html">Next</a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/metrics2/util/package-tree.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html b/devapidocs/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html
new file mode 100644
index 0000000..f4f88b4
--- /dev/null
+++ b/devapidocs/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html
@@ -0,0 +1,495 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>HelloHBase (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="HelloHBase (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/HelloHBase.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Class</li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" target="_top">Frames</a></li>
+<li><a href="HelloHBase.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hbase.archetypes.exemplars.client</div>
+<h2 title="Class HelloHBase" class="title">Class HelloHBase</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hbase.archetypes.exemplars.client.HelloHBase</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public final class <a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.44">HelloHBase</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">Successful running of this application requires access to an active instance
+ of HBase. For install instructions for a standalone instance of HBase, please
+ refer to https://hbase.apache.org/book.html#quickstart</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="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>(package private) static byte[]</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_COLUMN_FAMILY_NAME">MY_COLUMN_FAMILY_NAME</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static byte[]</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_FIRST_COLUMN_QUALIFIER">MY_FIRST_COLUMN_QUALIFIER</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>protected 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/hbase/archetypes/exemplars/client/HelloHBase.html#MY_NAMESPACE_NAME">MY_NAMESPACE_NAME</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static byte[]</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_ROW_ID">MY_ROW_ID</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static byte[]</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_SECOND_COLUMN_QUALIFIER">MY_SECOND_COLUMN_QUALIFIER</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#MY_TABLE_NAME">MY_TABLE_NAME</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier</th>
+<th class="colLast" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private </code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#HelloHBase()">HelloHBase</a></strong>()</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</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>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#createNamespaceAndTable(org.apache.hadoop.hbase.client.Admin)">createNamespaceAndTable</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin)</code>
+<div class="block">Invokes Admin#createNamespace and Admin#createTable to create a namespace
+ with a table that has one column-family.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#deleteNamespaceAndTable(org.apache.hadoop.hbase.client.Admin)">deleteNamespaceAndTable</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin)</code>
+<div class="block">Invokes Admin#disableTable, Admin#deleteTable, and Admin#deleteNamespace to
+ disable/delete Table and delete Namespace.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#deleteRow(org.apache.hadoop.hbase.client.Table)">deleteRow</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)</code>
+<div class="block">Invokes Table#delete to delete test data (i.e.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#getAndPrintRowContents(org.apache.hadoop.hbase.client.Table)">getAndPrintRowContents</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)</code>
+<div class="block">Invokes Table#get and prints out the contents of the retrieved row.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#main(java.lang.String[])">main</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;args)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#namespaceExists(org.apache.hadoop.hbase.client.Admin,%20java.lang.String)">namespaceExists</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
+                              <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;namespaceName)</code>
+<div class="block">Checks to see whether a namespace exists.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#putRowToTable(org.apache.hadoop.hbase.client.Table)">putRowToTable</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)</code>
+<div class="block">Invokes Table#put to store a row (with two new columns created 'on the
+ fly') into the table.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="MY_NAMESPACE_NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MY_NAMESPACE_NAME</h4>
+<pre>protected 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/hbase/archetypes/exemplars/client/HelloHBase.html#line.46">MY_NAMESPACE_NAME</a></pre>
+<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../constant-values.html#org.apache.hbase.archetypes.exemplars.client.HelloHBase.MY_NAMESPACE_NAME">Constant Field Values</a></dd></dl>
+</li>
+</ul>
+<a name="MY_TABLE_NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MY_TABLE_NAME</h4>
+<pre>static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> <a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.47">MY_TABLE_NAME</a></pre>
+</li>
+</ul>
+<a name="MY_COLUMN_FAMILY_NAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MY_COLUMN_FAMILY_NAME</h4>
+<pre>static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.48">MY_COLUMN_FAMILY_NAME</a></pre>
+</li>
+</ul>
+<a name="MY_FIRST_COLUMN_QUALIFIER">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MY_FIRST_COLUMN_QUALIFIER</h4>
+<pre>static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.49">MY_FIRST_COLUMN_QUALIFIER</a></pre>
+</li>
+</ul>
+<a name="MY_SECOND_COLUMN_QUALIFIER">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>MY_SECOND_COLUMN_QUALIFIER</h4>
+<pre>static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.51">MY_SECOND_COLUMN_QUALIFIER</a></pre>
+</li>
+</ul>
+<a name="MY_ROW_ID">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>MY_ROW_ID</h4>
+<pre>static final&nbsp;byte[] <a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.53">MY_ROW_ID</a></pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="HelloHBase()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>HelloHBase</h4>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.56">HelloHBase</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="main(java.lang.String[])">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>main</h4>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.59">main</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;args)
+                 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="createNamespaceAndTable(org.apache.hadoop.hbase.client.Admin)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createNamespaceAndTable</h4>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.101">createNamespaceAndTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin)
+                             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">Invokes Admin#createNamespace and Admin#createTable to create a namespace
+ with a table that has one column-family.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>admin</code> - Standard Admin object</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> - If IO problem encountered</dd></dl>
+</li>
+</ul>
+<a name="putRowToTable(org.apache.hadoop.hbase.client.Table)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>putRowToTable</h4>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.126">putRowToTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)
+                   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">Invokes Table#put to store a row (with two new columns created 'on the
+ fly') into the table.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>table</code> - Standard Table object (used for CRUD operations).</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> - If IO problem encountered</dd></dl>
+</li>
+</ul>
+<a name="getAndPrintRowContents(org.apache.hadoop.hbase.client.Table)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getAndPrintRowContents</h4>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.150">getAndPrintRowContents</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)
+                            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">Invokes Table#get and prints out the contents of the retrieved row.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>table</code> - Standard Table object</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> - If IO problem encountered</dd></dl>
+</li>
+</ul>
+<a name="namespaceExists(org.apache.hadoop.hbase.client.Admin, java.lang.String)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>namespaceExists</h4>
+<pre>static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.184">namespaceExists</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin,
+                      <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;namespaceName)
+                        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">Checks to see whether a namespace exists.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>admin</code> - Standard Admin object</dd><dd><code>namespaceName</code> - Name of namespace</dd>
+<dt><span class="strong">Returns:</span></dt><dd>true If namespace exists</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> - If IO problem encountered</dd></dl>
+</li>
+</ul>
+<a name="deleteRow(org.apache.hadoop.hbase.client.Table)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>deleteRow</h4>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.200">deleteRow</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)
+               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">Invokes Table#delete to delete test data (i.e. the row)</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>table</code> - Standard Table object</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> - If IO problem is encountered</dd></dl>
+</li>
+</ul>
+<a name="deleteNamespaceAndTable(org.apache.hadoop.hbase.client.Admin)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>deleteNamespaceAndTable</h4>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#line.214">deleteNamespaceAndTable</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a>&nbsp;admin)
+                             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">Invokes Admin#disableTable, Admin#deleteTable, and Admin#deleteNamespace to
+ disable/delete Table and delete Namespace.</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>admin</code> - Standard Admin object</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> - If IO problem is encountered</dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/HelloHBase.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev Class</li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" target="_top">Frames</a></li>
+<li><a href="HelloHBase.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hbase/archetypes/exemplars/client/class-use/HelloHBase.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hbase/archetypes/exemplars/client/class-use/HelloHBase.html b/devapidocs/org/apache/hbase/archetypes/exemplars/client/class-use/HelloHBase.html
new file mode 100644
index 0000000..55a7570
--- /dev/null
+++ b/devapidocs/org/apache/hbase/archetypes/exemplars/client/class-use/HelloHBase.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hbase.archetypes.exemplars.client.HelloHBase (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Class org.apache.hbase.archetypes.exemplars.client.HelloHBase (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/class-use/HelloHBase.html" target="_top">Frames</a></li>
+<li><a href="HelloHBase.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h2 title="Uses of Class org.apache.hbase.archetypes.exemplars.client.HelloHBase" class="title">Uses of Class<br>org.apache.hbase.archetypes.exemplars.client.HelloHBase</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hbase.archetypes.exemplars.client.HelloHBase</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="../package-summary.html">Package</a></li>
+<li><a href="../../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client">Class</a></li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="../../../../../../../overview-tree.html">Tree</a></li>
+<li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/class-use/HelloHBase.html" target="_top">Frames</a></li>
+<li><a href="HelloHBase.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-frame.html b/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-frame.html
new file mode 100644
index 0000000..a4000f5
--- /dev/null
+++ b/devapidocs/org/apache/hbase/archetypes/exemplars/client/package-frame.html
@@ -0,0 +1,18 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>org.apache.hbase.archetypes.exemplars.client (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<h1 class="bar"><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html" target="classFrame">org.apache.hbase.archetypes.exemplars.client</a></h1>
+<div class="indexContainer">
+<h2 title="Classes">Classes</h2>
+<ul title="Classes">
+<li><a href="HelloHBase.html" title="class in org.apache.hbase.archetypes.exemplars.client" target="classFrame">HelloHBase</a></li>
+</ul>
+</div>
+</body>
+</html>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html
index ed06d4c..835ec87 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html
@@ -74,718 +74,769 @@
 <span class="sourceLineNo">066</span>  private volatile long numStoreFiles = 0;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>  private volatile long memstoreSize = 0;<a name="line.67"></a>
 <span class="sourceLineNo">068</span>  private volatile long storeFileSize = 0;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private volatile double requestsPerSecond = 0.0;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private volatile long readRequestsCount = 0;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private volatile long filteredReadRequestsCount = 0;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private volatile long writeRequestsCount = 0;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private volatile long checkAndMutateChecksFailed = 0;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private volatile long checkAndMutateChecksPassed = 0;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private volatile long storefileIndexSize = 0;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private volatile long totalStaticIndexSize = 0;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private volatile long totalStaticBloomSize = 0;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private volatile long numMutationsWithoutWAL = 0;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private volatile long dataInMemoryWithoutWAL = 0;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private volatile double percentFileLocal = 0;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private volatile double percentFileLocalSecondaryRegions = 0;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private volatile long flushedCellsCount = 0;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private volatile long compactedCellsCount = 0;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private volatile long majorCompactedCellsCount = 0;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private volatile long flushedCellsSize = 0;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private volatile long compactedCellsSize = 0;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private volatile long majorCompactedCellsSize = 0;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private volatile long cellsCountCompactedToMob = 0;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private volatile long cellsCountCompactedFromMob = 0;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private volatile long cellsSizeCompactedToMob = 0;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private volatile long cellsSizeCompactedFromMob = 0;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private volatile long mobFlushCount = 0;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private volatile long mobFlushedCellsCount = 0;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private volatile long mobFlushedCellsSize = 0;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private volatile long mobScanCellsCount = 0;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  private volatile long mobScanCellsSize = 0;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private volatile long mobFileCacheAccessCount = 0;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private volatile long mobFileCacheMissCount = 0;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private volatile double mobFileCacheHitRatio = 0;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private volatile long mobFileCacheEvictedCount = 0;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private volatile long mobFileCacheCount = 0;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private volatile long blockedRequestsCount = 0L;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private CacheStats cacheStats;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private ScheduledExecutorService executor;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  private Runnable runnable;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private long period;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * Can be null if not on hdfs.<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  private DFSHedgedReadMetrics dfsHedgedReadMetrics;<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  public MetricsRegionServerWrapperImpl(final HRegionServer regionServer) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.regionServer = regionServer;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    initBlockCache();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    initMobFileCache();<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    this.period =<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        regionServer.conf.getLong(HConstants.REGIONSERVER_METRICS_PERIOD,<a name="line.120"></a>
-<span class="sourceLineNo">121</span>          HConstants.DEFAULT_REGIONSERVER_METRICS_PERIOD);<a name="line.121"></a>
+<span class="sourceLineNo">069</span>  private volatile long maxStoreFileAge = 0;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private volatile long minStoreFileAge = 0;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private volatile long avgStoreFileAge = 0;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private volatile long numReferenceFiles = 0;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private volatile double requestsPerSecond = 0.0;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private volatile long readRequestsCount = 0;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private volatile long filteredReadRequestsCount = 0;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private volatile long writeRequestsCount = 0;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private volatile long checkAndMutateChecksFailed = 0;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private volatile long checkAndMutateChecksPassed = 0;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private volatile long storefileIndexSize = 0;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private volatile long totalStaticIndexSize = 0;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private volatile long totalStaticBloomSize = 0;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private volatile long numMutationsWithoutWAL = 0;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  private volatile long dataInMemoryWithoutWAL = 0;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private volatile double percentFileLocal = 0;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private volatile double percentFileLocalSecondaryRegions = 0;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private volatile long flushedCellsCount = 0;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private volatile long compactedCellsCount = 0;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private volatile long majorCompactedCellsCount = 0;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private volatile long flushedCellsSize = 0;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private volatile long compactedCellsSize = 0;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private volatile long majorCompactedCellsSize = 0;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private volatile long cellsCountCompactedToMob = 0;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private volatile long cellsCountCompactedFromMob = 0;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private volatile long cellsSizeCompactedToMob = 0;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private volatile long cellsSizeCompactedFromMob = 0;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private volatile long mobFlushCount = 0;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private volatile long mobFlushedCellsCount = 0;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private volatile long mobFlushedCellsSize = 0;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private volatile long mobScanCellsCount = 0;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private volatile long mobScanCellsSize = 0;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private volatile long mobFileCacheAccessCount = 0;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private volatile long mobFileCacheMissCount = 0;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private volatile double mobFileCacheHitRatio = 0;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private volatile long mobFileCacheEvictedCount = 0;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private volatile long mobFileCacheCount = 0;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private volatile long blockedRequestsCount = 0L;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private CacheStats cacheStats;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  private ScheduledExecutorService executor;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private Runnable runnable;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private long period;<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>   * Can be null if not on hdfs.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private DFSHedgedReadMetrics dfsHedgedReadMetrics;<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  public MetricsRegionServerWrapperImpl(final HRegionServer regionServer) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    this.regionServer = regionServer;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    initBlockCache();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    initMobFileCache();<a name="line.121"></a>
 <span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>    this.executor = CompatibilitySingletonFactory.getInstance(MetricsExecutor.class).getExecutor();<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    this.runnable = new RegionServerMetricsWrapperRunnable();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.executor.scheduleWithFixedDelay(this.runnable, this.period, this.period,<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      TimeUnit.MILLISECONDS);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    this.metricsWALSource = CompatibilitySingletonFactory.getInstance(MetricsWALSource.class);<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>    try {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      this.dfsHedgedReadMetrics = FSUtils.getDFSHedgedReadMetrics(regionServer.getConfiguration());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    } catch (IOException e) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      LOG.warn("Failed to get hedged metrics", e);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    if (LOG.isInfoEnabled()) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.info("Computing regionserver metrics every " + this.period + " milliseconds");<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>  /**<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   * It's possible that due to threading the block cache could not be initialized<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * yet (testing multiple region servers in one jvm).  So we need to try and initialize<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * the blockCache and cacheStats reference multiple times until we succeed.<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private synchronized  void initBlockCache() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    CacheConfig cacheConfig = this.regionServer.cacheConfig;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    if (cacheConfig != null &amp;&amp; this.blockCache == null) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      this.blockCache = cacheConfig.getBlockCache();<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>    if (this.blockCache != null &amp;&amp; this.cacheStats == null) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      this.cacheStats = blockCache.getStats();<a name="line.151"></a>
+<span class="sourceLineNo">123</span>    this.period =<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        regionServer.conf.getLong(HConstants.REGIONSERVER_METRICS_PERIOD,<a name="line.124"></a>
+<span class="sourceLineNo">125</span>          HConstants.DEFAULT_REGIONSERVER_METRICS_PERIOD);<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.executor = CompatibilitySingletonFactory.getInstance(MetricsExecutor.class).getExecutor();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.runnable = new RegionServerMetricsWrapperRunnable();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    this.executor.scheduleWithFixedDelay(this.runnable, this.period, this.period,<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      TimeUnit.MILLISECONDS);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    this.metricsWALSource = CompatibilitySingletonFactory.getInstance(MetricsWALSource.class);<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>    try {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      this.dfsHedgedReadMetrics = FSUtils.getDFSHedgedReadMetrics(regionServer.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    } catch (IOException e) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Failed to get hedged metrics", e);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    if (LOG.isInfoEnabled()) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.info("Computing regionserver metrics every " + this.period + " milliseconds");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    }<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>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * It's possible that due to threading the block cache could not be initialized<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * yet (testing multiple region servers in one jvm).  So we need to try and initialize<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * the blockCache and cacheStats reference multiple times until we succeed.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  private synchronized  void initBlockCache() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    CacheConfig cacheConfig = this.regionServer.cacheConfig;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (cacheConfig != null &amp;&amp; this.blockCache == null) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      this.blockCache = cacheConfig.getBlockCache();<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><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Initializes the mob file cache.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private synchronized void initMobFileCache() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    MobCacheConfig mobCacheConfig = this.regionServer.mobCacheConfig;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    if (mobCacheConfig != null &amp;&amp; this.mobFileCache == null) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      this.mobFileCache = mobCacheConfig.getMobFileCache();<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>  @Override<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public String getClusterId() {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return regionServer.getClusterId();<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 long getStartCode() {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    return regionServer.getStartcode();<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 String getZookeeperQuorum() {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    ZooKeeperWatcher zk = regionServer.getZooKeeper();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    if (zk == null) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return "";<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return zk.getQuorum();<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>  @Override<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  public String getCoprocessors() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    String[] coprocessors = regionServer.getRegionServerCoprocessors();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    if (coprocessors == null || coprocessors.length == 0) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return "";<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    return StringUtils.join(coprocessors, ", ");<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public String getServerName() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    ServerName serverName = regionServer.getServerName();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    if (serverName == null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      return "";<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    return serverName.getServerName();<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>  @Override<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  public long getNumOnlineRegions() {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    Collection&lt;Region&gt; onlineRegionsLocalContext = regionServer.getOnlineRegionsLocalContext();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (onlineRegionsLocalContext == null) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      return 0;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    return onlineRegionsLocalContext.size();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>  @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  public long getTotalRequestCount() {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    return regionServer.rpcServices.requestCount.get();<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>  @Override<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public int getSplitQueueSize() {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      return 0;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    return this.regionServer.compactSplitThread.getSplitQueueSize();<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>  @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  public int getCompactionQueueSize() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      return 0;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    return this.regionServer.compactSplitThread.getCompactionQueueSize();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  @Override<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  public int getSmallCompactionQueueSize() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      return 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return this.regionServer.compactSplitThread.getSmallCompactionQueueSize();<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>  @Override<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public int getLargeCompactionQueueSize() {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    return this.regionServer.compactSplitThread.getLargeCompactionQueueSize();<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>  @Override<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public int getFlushQueueSize() {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    //If there is no flusher there should be no queue.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    if (this.regionServer.cacheFlusher == null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return 0;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    return this.regionServer.cacheFlusher.getFlushQueueSize();<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>  @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public long getBlockCacheCount() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    if (this.blockCache == null) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      return 0;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    return this.blockCache.getBlockCount();<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>  @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  public long getBlockCacheSize() {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    if (this.blockCache == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      return 0;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return this.blockCache.getCurrentSize();<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 long getBlockCacheFreeSize() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (this.blockCache == null) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      return 0;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    return this.blockCache.getFreeSize();<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>  @Override<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  public long getBlockCacheHitCount() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    if (this.cacheStats == null) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      return 0;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return this.cacheStats.getHitCount();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
-<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span>  @Override<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  public long getBlockCachePrimaryHitCount() {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    if (this.cacheStats == null) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      return 0;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    return this.cacheStats.getPrimaryHitCount();<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>  @Override<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  public long getBlockCacheMissCount() {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (this.cacheStats == null) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      return 0;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return this.cacheStats.getMissCount();<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 long getBlockCachePrimaryMissCount() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    if (this.cacheStats == null) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      return 0;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    return this.cacheStats.getPrimaryMissCount();<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 long getBlockCacheEvictedCount() {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    if (this.cacheStats == null) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      return 0;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    return this.cacheStats.getEvictedCount();<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>  @Override<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public long getBlockCachePrimaryEvictedCount() {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (this.cacheStats == null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      return 0;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    return this.cacheStats.getPrimaryEvictedCount();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  }<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  @Override<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  public double getBlockCacheHitPercent() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (this.cacheStats == null) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      return 0;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    double ratio = this.cacheStats.getHitRatio();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    if (Double.isNaN(ratio)) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      ratio = 0;<a name="line.339"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (this.blockCache != null &amp;&amp; this.cacheStats == null) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      this.cacheStats = blockCache.getStats();<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><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Initializes the mob file cache.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  private synchronized void initMobFileCache() {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    MobCacheConfig mobCacheConfig = this.regionServer.mobCacheConfig;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    if (mobCacheConfig != null &amp;&amp; this.mobFileCache == null) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      this.mobFileCache = mobCacheConfig.getMobFileCache();<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><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  @Override<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public String getClusterId() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return regionServer.getClusterId();<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 long getStartCode() {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    return regionServer.getStartcode();<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>  @Override<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  public String getZookeeperQuorum() {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    ZooKeeperWatcher zk = regionServer.getZooKeeper();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    if (zk == null) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      return "";<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    return zk.getQuorum();<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>  @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public String getCoprocessors() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    String[] coprocessors = regionServer.getRegionServerCoprocessors();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (coprocessors == null || coprocessors.length == 0) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return "";<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    return StringUtils.join(coprocessors, ", ");<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>  @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public String getServerName() {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    ServerName serverName = regionServer.getServerName();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (serverName == null) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      return "";<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    return serverName.getServerName();<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>  @Override<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public long getNumOnlineRegions() {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    Collection&lt;Region&gt; onlineRegionsLocalContext = regionServer.getOnlineRegionsLocalContext();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (onlineRegionsLocalContext == null) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      return 0;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    return onlineRegionsLocalContext.size();<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>  @Override<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  public long getTotalRequestCount() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    return regionServer.rpcServices.requestCount.get();<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>  @Override<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  public int getSplitQueueSize() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      return 0;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return this.regionServer.compactSplitThread.getSplitQueueSize();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  }<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 int getCompactionQueueSize() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      return 0;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    return this.regionServer.compactSplitThread.getCompactionQueueSize();<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>  @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  public int getSmallCompactionQueueSize() {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      return 0;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return this.regionServer.compactSplitThread.getSmallCompactionQueueSize();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @Override<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public int getLargeCompactionQueueSize() {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      return 0;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    return this.regionServer.compactSplitThread.getLargeCompactionQueueSize();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>  @Override<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  public int getFlushQueueSize() {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    //If there is no flusher there should be no queue.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    if (this.regionServer.cacheFlusher == null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      return 0;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return this.regionServer.cacheFlusher.getFlushQueueSize();<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>  @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  public long getBlockCacheCount() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    if (this.blockCache == null) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      return 0;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return this.blockCache.getBlockCount();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>  @Override<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  public long getBlockCacheSize() {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (this.blockCache == null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    return this.blockCache.getCurrentSize();<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 long getBlockCacheFreeSize() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    if (this.blockCache == null) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    return this.blockCache.getFreeSize();<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>  @Override<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  public long getBlockCacheHitCount() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    if (this.cacheStats == null) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      return 0;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    return this.cacheStats.getHitCount();<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>  public long getBlockCachePrimaryHitCount() {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    if (this.cacheStats == null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      return 0;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    return this.cacheStats.getPrimaryHitCount();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Override<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public long getBlockCacheMissCount() {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    if (this.cacheStats == null) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      return 0;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    return this.cacheStats.getMissCount();<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>  @Override<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public long getBlockCachePrimaryMissCount() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    if (this.cacheStats == null) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      return 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return this.cacheStats.getPrimaryMissCount();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public long getBlockCacheEvictedCount() {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (this.cacheStats == null) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      return 0;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return this.cacheStats.getEvictedCount();<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 long getBlockCachePrimaryEvictedCount() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    if (this.cacheStats == null) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      return 0;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    return this.cacheStats.getPrimaryEvictedCount();<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 double getBlockCacheHitPercent() {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    if (this.cacheStats == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      return 0;<a name="line.339"></a>
 <span class="sourceLineNo">340</span>    }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    return (ratio * 100);<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>  @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public double getBlockCacheHitCachingPercent() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    if (this.cacheStats == null) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      return 0;<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>    double ratio = this.cacheStats.getHitCachingRatio();<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    if (Double.isNaN(ratio)) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      ratio = 0;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    return (ratio * 100);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  @Override<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public long getBlockCacheFailedInsertions() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return this.cacheStats.getFailedInserts();<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>  @Override public void forceRecompute() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    this.runnable.run();<a name="line.364"></a>
+<span class="sourceLineNo">341</span>    double ratio = this.cacheStats.getHitRatio();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    if (Double.isNaN(ratio)) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      ratio = 0;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    return (ratio * 100);<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>  @Override<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  public double getBlockCacheHitCachingPercent() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (this.cacheStats == null) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      return 0;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    double ratio = this.cacheStats.getHitCachingRatio();<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>    if (Double.isNaN(ratio)) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      ratio = 0;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    return (ratio * 100);<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>  @Override<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  public long getBlockCacheFailedInsertions() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    return this.cacheStats.getFailedInserts();<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>  @Override<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  public long getNumStores() {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    return numStores;<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>  @Override<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  public long getNumWALFiles() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    return numWALFiles;<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>  @Override<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  public long getWALFileSize() {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    return walFileSize;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>  @Override<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public long getNumWALSlowAppend() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    return metricsWALSource.getSlowAppendCount();<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  <a name="line.386"></a>
-<span class="sourceLineNo">387</span>  @Override<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  public long getNumStoreFiles() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return numStoreFiles;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  @Override<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public long getMemstoreSize() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return memstoreSize;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public long getStoreFileSize() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    return storeFileSize;<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>  @Override public double getRequestsPerSecond() {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    return requestsPerSecond;<a name="line.403"></a>
+<span class="sourceLineNo">367</span>  @Override public void forceRecompute() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    this.runnable.run();<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>  @Override<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  public long getNumStores() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return numStores;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  <a name="line.375"></a>
+<span class="sourceLineNo">376</span>  @Override<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  public long getNumWALFiles() {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    return numWALFiles;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  @Override<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  public long getWALFileSize() {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    return walFileSize;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  }<a name="line.384"></a>
+<span class="sourceLineNo">385</span><a name="line.385"></a>
+<span class="sourceLineNo">386</span>  @Override<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public long getNumWALSlowAppend() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    return metricsWALSource.getSlowAppendCount();<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  <a name="line.390"></a>
+<span class="sourceLineNo">391</span>  @Override<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  public long getNumStoreFiles() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return numStoreFiles;<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>  @Override<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  public long getMaxStoreFileAge() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    return maxStoreFileAge;<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>  @Override<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  public long getMinStoreFileAge() {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    return minStoreFileAge;<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>  @Override<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  public long getReadRequestsCount() {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    return readRequestsCount;<a name="line.408"></a>
+<span class="sourceLineNo">407</span>  public long getAvgStoreFileAge() {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return avgStoreFileAge;<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>  @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  public long getFilteredReadRequestsCount() {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    return filteredReadRequestsCount;<a name="line.413"></a>
+<span class="sourceLineNo">412</span>  public long getNumReferenceFiles() {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    return numReferenceFiles;<a name="line.413"></a>
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  public long getWriteRequestsCount() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return writeRequestsCount;<a name="line.418"></a>
+<span class="sourceLineNo">417</span>  public long getMemstoreSize() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    return memstoreSize;<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>  @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  public long getRpcGetRequestsCount() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    return regionServer.rpcServices.rpcGetRequestCount.get();<a name="line.423"></a>
+<span class="sourceLineNo">422</span>  public long getStoreFileSize() {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    return storeFileSize;<a name="line.423"></a>
 <span class="sourceLineNo">424</span>  }<a name="line.424"></a>
 <span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  public long getRpcScanRequestsCount() {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return regionServer.rpcServices.rpcScanRequestCount.get();<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>  @Override<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  public long getRpcMultiRequestsCount() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    return regionServer.rpcServices.rpcMultiRequestCount.get();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  public long getRpcMutateRequestsCount() {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    return regionServer.rpcServices.rpcMutateRequestCount.get();<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  @Override<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public long getCheckAndMutateChecksFailed() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return checkAndMutateChecksFailed;<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>  @Override<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  public long getCheckAndMutateChecksPassed() {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    return checkAndMutateChecksPassed;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public long getStoreFileIndexSize() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return storefileIndexSize;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public long getTotalStaticIndexSize() {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    return totalStaticIndexSize;<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>  @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public long getTotalStaticBloomSize() {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return totalStaticBloomSize;<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>  @Override<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  public long getNumMutationsWithoutWAL() {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return numMutationsWithoutWAL;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>  @Override<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  public long getDataInMemoryWithoutWAL() {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    return dataInMemoryWithoutWAL;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>  @Override<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  public double getPercentFileLocal() {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    return percentFileLocal;<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>  @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  public double getPercentFileLocalSecondaryRegions() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    return percentFileLocalSecondaryRegions;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  @Override<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  public long getUpdatesBlockedTime() {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (this.regionServer.cacheFlusher == null) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      return 0;<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    }<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    return this.regionServer.cacheFlusher.getUpdatesBlockedMsHighWater().get();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>  }<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>  @Override<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  public long getFlushedCellsCount() {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    return flushedCellsCount;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  }<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>  @Override<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  public long getCompactedCellsCount() {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    return compactedCellsCount;<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>  @Override<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  public long getMajorCompactedCellsCount() {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    return majorCompactedCellsCount;<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>  @Override<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  public long getFlushedCellsSize() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    return flushedCellsSize;<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>  @Override<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  public long getCompactedCellsSize() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    return compactedCellsSize;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  @Override<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  public long getMajorCompactedCellsSize() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return majorCompactedCellsSize;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  @Override<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  public long getCellsCountCompactedFromMob() {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    return cellsCountCompactedFromMob;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>  @Override<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  public long getCellsCountCompactedToMob() {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    return cellsCountCompactedToMob;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>  @Override<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  public long getCellsSizeCompactedFromMob() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    return cellsSizeCompactedFromMob;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  @Override<a name="line.539"></a>
-<span class="sourceLineNo">540</span>  public long getCellsSizeCompactedToMob() {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return cellsSizeCompactedToMob;<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>  @Override<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public long getMobFlushCount() {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    return mobFlushCount;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public long getMobFlushedCellsCount() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    return mobFlushedCellsCount;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  @Override<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  public long getMobFlushedCellsSize() {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return mobFlushedCellsSize;<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>  @Override<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public long getMobScanCellsCount() {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return mobScanCellsCount;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @Override<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  public long getMobScanCellsSize() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    return mobScanCellsSize;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  public long getMobFileCacheAccessCount() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return mobFileCacheAccessCount;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  @Override<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public long getMobFileCacheMissCount() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    return mobFileCacheMissCount;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  @Override<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  public long getMobFileCacheCount() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    return mobFileCacheCount;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>  @Override<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  public long getMobFileCacheEvictedCount() {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    return mobFileCacheEvictedCount;<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  @Override<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  public double getMobFileCacheHitPercent() {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    return mobFileCacheHitRatio * 100;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  }<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>  /**<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * This is the runnable that will be executed on the executor every PERIOD number of seconds<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * It will take metrics/numbers from all of the regions and use them to compute point in<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * time metrics.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public class RegionServerMetricsWrapperRunnable implements Runnable {<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>    private long lastRan = 0;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    private long lastRequestCount = 0;<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    @Override<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    synchronized public void run() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      try {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        initBlockCache();<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        initMobFileCache();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        cacheStats = blockCache.getStats();<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>        HDFSBlocksDistribution hdfsBlocksDistribution =<a name="line.611"></a>
-<span class="sourceLineNo">612</span>            new HDFSBlocksDistribution();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        HDFSBlocksDistribution hdfsBlocksDistributionSecondaryRegions =<a name="line.613"></a>
-<span class="sourceLineNo">614</span>            new HDFSBlocksDistribution();<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>        long tempNumStores = 0, tempNumStoreFiles = 0, tempMemstoreSize = 0, tempStoreFileSize = 0;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        long tempReadRequestsCount = 0, tempFilteredReadRequestsCount = 0,<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          tempWriteRequestsCount = 0;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        long tempCheckAndMutateChecksFailed = 0;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>        long tempCheckAndMutateChecksPassed = 0;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        long tempStorefileIndexSize = 0;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>        long tempTotalStaticIndexSize = 0;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        long tempTotalStaticBloomSize = 0;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        long tempNumMutationsWithoutWAL = 0;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        long tempDataInMemoryWithoutWAL = 0;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        double tempPercentFileLocal = 0;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        double tempPercentFileLocalSecondaryRegions = 0;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        long tempFlushedCellsCount = 0;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        long tempCompactedCellsCount = 0;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        long tempMajorCompactedCellsCount = 0;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        long tempFlushedCellsSize = 0;<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        long tempCompactedCellsSize = 0;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        long tempMajorCompactedCellsSize = 0;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        long tempCellsCountCompactedToMob = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>        long tempCellsCountCompactedFromMob = 0;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        long tempCellsSizeCompactedToMob = 0;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        long tempCellsSizeCompactedFromMob = 0;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        long tempMobFlushCount = 0;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        long tempMobFlushedCellsCount = 0;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        long tempMobFlushedCellsSize = 0;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        long tempMobScanCellsCount = 0;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        long tempMobScanCellsSize = 0;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        long tempBlockedRequestsCount = 0;<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span>        for (Region r : regionServer.getOnlineRegionsLocalContext()) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span>          tempNumMutationsWithoutWAL += r.getNumMutationsWithoutWAL();<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          tempDataInMemoryWithoutWAL += r.getDataInMemoryWithoutWAL();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          tempReadRequestsCount += r.getReadRequestsCount();<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          tempFilteredReadRequestsCount += r.getFilteredReadRequestsCount();<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          tempWriteRequestsCount += r.getWriteRequestsCount();<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          tempCheckAndMutateChecksFailed += r.getCheckAndMutateChecksFailed();<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          tempCheckAndMutateChecksPassed += r.getCheckAndMutateChecksPassed();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>          tempBlockedRequestsCount += r.getBlockedRequestsCount();<a name="line.653"></a>
-<span class="sourceLineNo">654</span>          List&lt;Store&gt; storeList = r.getStores();<a name="line.654"></a>
-<span class="sourceLineNo">655</span>          tempNumStores += storeList.size();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          for (Store store : storeList) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>            tempNumStoreFiles += store.getStorefilesCount();<a name="line.657"></a>
-<span class="sourceLineNo">658</span>            tempMemstoreSize += store.getMemStoreSize();<a name="line.658"></a>
-<span class="sourceLineNo">659</span>            tempStoreFileSize += store.getStorefilesSize();<a name="line.659"></a>
-<span class="sourceLineNo">660</span>            tempStorefileIndexSize += store.getStorefilesIndexSize();<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            tempTotalStaticBloomSize += store.getTotalStaticBloomSize();<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            tempTotalStaticIndexSize += store.getTotalStaticIndexSize();<a name="line.662"></a>
-<span class="sourceLineNo">663</span>            tempFlushedCellsCount += store.getFlushedCellsCount();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>            tempCompactedCellsCount += store.getCompactedCellsCount();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            tempMajorCompactedCellsCount += store.getMajorCompactedCellsCount();<a name="line.665"></a>
-<span class="sourceLineNo">666</span>            tempFlushedCellsSize += store.getFlushedCellsSize();<a name="line.666"></a>
-<span class="sourceLineNo">667</span>            tempCompactedCellsSize += store.getCompactedCellsSize();<a name="line.667"></a>
-<span class="sourceLineNo">668</span>            tempMajorCompactedCellsSize += store.getMajorCompactedCellsSize();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>            if (store instanceof HMobStore) {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>              HMobStore mobStore = (HMobStore) store;<a name="line.670"></a>
-<span class="sourceLineNo">671</span>              tempCellsCountCompactedToMob += mobStore.getCellsCountCompactedToMob();<a name="line.671"></a>
-<span class="sourceLineNo">672</span>              tempCellsCountCompactedFromMob += mobStore.getCellsCountCompactedFromMob();<a name="line.672"></a>
-<span class="sourceLineNo">673</span>              tempCellsSizeCompactedToMob += mobStore.getCellsSizeCompactedToMob();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>              tempCellsSizeCompactedFromMob += mobStore.getCellsSizeCompactedFromMob();<a name="line.674"></a>
-<span class="sourceLineNo">675</span>              tempMobFlushCount += mobStore.getMobFlushCount();<a name="line.675"></a>
-<span class="sourceLineNo">676</span>              tempMobFlushedCellsCount += mobStore.getMobFlushedCellsCount();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>              tempMobFlushedCellsSize += mobStore.getMobFlushedCellsSize();<a name="line.677"></a>
-<span class="sourceLineNo">678</span>              tempMobScanCellsCount += mobStore.getMobScanCellsCount();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>              tempMobScanCellsSize += mobStore.getMobScanCellsSize();<a name="line.679"></a>
-<span class="sourceLineNo">680</span>            }<a name="line.680"></a>
-<span class="sourceLineNo">681</span>          }<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>          HDFSBlocksDistribution distro = r.getHDFSBlocksDistribution();<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          hdfsBlocksDistribution.add(distro);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>          if (r.getRegionInfo().getReplicaId() != HRegionInfo.DEFAULT_REPLICA_ID) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>            hdfsBlocksDistributionSecondaryRegions.add(distro);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        float localityIndex = hdfsBlocksDistribution.getBlockLocalityIndex(<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            regionServer.getServerName().getHostname());<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        tempPercentFileLocal = Double.isNaN(tempBlockedRequestsCount) ? 0 : (localityIndex * 100);<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>        float localityIndexSecondaryRegions = hdfsBlocksDistributionSecondaryRegions<a name="line.693"></a>
-<span class="sourceLineNo">694</span>            .getBlockLocalityIndex(regionServer.getServerName().getHostname());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>        tempPercentFileLocalSecondaryRegions = Double.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>            isNaN(localityIndexSecondaryRegions) ? 0 : (localityIndexSecondaryRegions * 100);<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>        // Compute the number of requests per second<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.699"></a>
+<span class="sourceLineNo">426</span>  @Override public double getRequestsPerSecond() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    return requestsPerSecond;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public long getReadRequestsCount() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    return readRequestsCount;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  @Override<a name="line.435"></a>
+<span class="sourceLineNo">436</span>  public long getFilteredReadRequestsCount() {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    return filteredReadRequestsCount;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>  @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  public long getWriteRequestsCount() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    return writeRequestsCount;<a name="lin

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html
index fb6750e..5a380f2 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html
@@ -126,50 +126,54 @@ 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/StoreFileInfo.html#coprocessorHost">coprocessorHost</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#createdTimestamp">createdTimestamp</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/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#DELFILE_NAME_PATTERN">DELFILE_NAME_PATTERN</a></strong></code>
 <div class="block">Regex that will work for del files</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>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/regionserver/StoreFileInfo.html#DELFILE_NAME_REGEX">DELFILE_NAME_REGEX</a></strong></code>
 <div class="block">A non-capture group, for del files, so that this can be embedded.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.fs.FileSystem</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#fs">fs</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#hdfsBlocksDistribution">hdfsBlocksDistribution</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/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#HFILE_NAME_PATTERN">HFILE_NAME_PATTERN</a></strong></code>
 <div class="block">Regex that will work for hfiles</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>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/regionserver/StoreFileInfo.html#HFILE_NAME_REGEX">HFILE_NAME_REGEX</a></strong></code>
 <div class="block">A non-capture group, for hfiles, so that this can be embedded.</div>
 </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/StoreFileInfo.html#initialPath">initialPath</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html" title="class in org.apache.hadoop.hbase.io">HFileLink</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#link">link</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.apache.commons.logging.Log</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#LOG">LOG</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/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#REF_NAME_PATTERN">REF_NAME_PATTERN</a></strong></code>
 <div class="block">Regex that will work for straight reference names (<code>&lt;hfile&gt;.&lt;parentEncRegion&gt;</code>)
@@ -177,7 +181,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
  If reference, then the regex has more than just one group.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/io/Reference.html" title="class in org.apache.hadoop.hbase.io">Reference</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#reference">reference</a></strong></code>&nbsp;</td>
 </tr>
@@ -264,82 +268,86 @@ 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/StoreFileInfo.html#equals(java.lang.Object)">equals</a></strong>(<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;that)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#getCreatedTimestamp()">getCreatedTimestamp</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.FileStatus</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#getFileStatus()">getFileStatus</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#getHDFSBlockDistribution()">getHDFSBlockDistribution</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#getModificationTime()">getModificationTime</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#getPath()">getPath</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/io/Reference.html" title="class in org.apache.hadoop.hbase.io">Reference</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#getReference()">getReference</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.fs.FileStatus</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#getReferencedFileStatus(org.apache.hadoop.fs.FileSystem)">getReferencedFileStatus</a></strong>(org.apache.hadoop.fs.FileSystem&nbsp;fs)</code>
 <div class="block">Get the <code>FileStatus</code> of the file referenced by this StoreFileInfo</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#getReferredToFile(org.apache.hadoop.fs.Path)">getReferredToFile</a></strong>(org.apache.hadoop.fs.Path&nbsp;p)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#hashCode()">hashCode</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/regionserver/StoreFileInfo.html#isDelFile(org.apache.hadoop.fs.Path)">isDelFile</a></strong>(org.apache.hadoop.fs.Path&nbsp;path)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#isDelFile(java.lang.String)">isDelFile</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="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#isHFile(org.apache.hadoop.fs.Path)">isHFile</a></strong>(org.apache.hadoop.fs.Path&nbsp;path)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#isHFile(java.lang.String)">isHFile</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="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#isLink()">isLink</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#isReference()">isReference</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/regionserver/StoreFileInfo.html#isReference(org.apache.hadoop.fs.Path)">isReference</a></strong>(org.apache.hadoop.fs.Path&nbsp;path)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#isReference(java.lang.String)">isReference</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;name)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#isTopReference()">isTopReference</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#isValid(org.apache.hadoop.fs.FileStatus)">isValid</a></strong>(org.apache.hadoop.fs.FileStatus&nbsp;fileStatus)</code>
 <div class="block">Return if the specified file is a valid store file or not.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#open(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.io.hfile.CacheConfig,%20boolean)">open</a></strong>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
         <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;cacheConf,
@@ -347,17 +355,17 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="block">Open a Reader for the StoreFile</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/StoreFileInfo.html#setRegionCoprocessorHost(org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost)">setRegionCoprocessorHost</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;coprocessorHost)</code>
 <div class="block">Sets the region coprocessor env.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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/regionserver/StoreFileInfo.html#toString()">toString</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#validateStoreFileName(java.lang.String)">validateStoreFileName</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>
 <div class="block">Validate the store file name.</div>
@@ -510,12 +518,21 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <a name="coprocessorHost">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>coprocessorHost</h4>
 <pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.98">coprocessorHost</a></pre>
 </li>
 </ul>
+<a name="createdTimestamp">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>createdTimestamp</h4>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.101">createdTimestamp</a></pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -530,7 +547,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreFileInfo</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.106">StoreFileInfo</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.109">StoreFileInfo</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
              org.apache.hadoop.fs.FileSystem&nbsp;fs,
              org.apache.hadoop.fs.Path&nbsp;initialPath)
               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>
@@ -546,7 +563,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreFileInfo</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.148">StoreFileInfo</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.152">StoreFileInfo</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
              org.apache.hadoop.fs.FileSystem&nbsp;fs,
              org.apache.hadoop.fs.FileStatus&nbsp;fileStatus)
               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>
@@ -562,7 +579,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreFileInfo</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.159">StoreFileInfo</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.163">StoreFileInfo</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
              org.apache.hadoop.fs.FileSystem&nbsp;fs,
              org.apache.hadoop.fs.FileStatus&nbsp;fileStatus,
              <a href="../../../../../org/apache/hadoop/hbase/io/HFileLink.html" title="class in org.apache.hadoop.hbase.io">HFileLink</a>&nbsp;link)
@@ -579,7 +596,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFileInfo</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.179">StoreFileInfo</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.183">StoreFileInfo</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
              org.apache.hadoop.fs.FileSystem&nbsp;fs,
              org.apache.hadoop.fs.FileStatus&nbsp;fileStatus,
              <a href="../../../../../org/apache/hadoop/hbase/io/Reference.html" title="class in org.apache.hadoop.hbase.io">Reference</a>&nbsp;reference)
@@ -604,7 +621,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionCoprocessorHost</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.193">setRegionCoprocessorHost</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/StoreFileInfo.html#line.198">setRegionCoprocessorHost</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;coprocessorHost)</pre>
 <div class="block">Sets the region coprocessor env.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>coprocessorHost</code> - </dd></dl>
 </li>
@@ -615,7 +632,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getReference</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/Reference.html" title="class in org.apache.hadoop.hbase.io">Reference</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.201">getReference</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/Reference.html" title="class in org.apache.hadoop.hbase.io">Reference</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.206">getReference</a>()</pre>
 </li>
 </ul>
 <a name="isReference()">
@@ -624,7 +641,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isReference</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.206">isReference</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.211">isReference</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>True if the store file is a Reference</dd></dl>
 </li>
 </ul>
@@ -634,7 +651,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isTopReference</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.211">isTopReference</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.216">isTopReference</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>True if the store file is a top Reference</dd></dl>
 </li>
 </ul>
@@ -644,7 +661,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isLink</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.216">isLink</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.221">isLink</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>True if the store file is a link</dd></dl>
 </li>
 </ul>
@@ -654,7 +671,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getHDFSBlockDistribution</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.221">getHDFSBlockDistribution</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.226">getHDFSBlockDistribution</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the HDFS block distribution</dd></dl>
 </li>
 </ul>
@@ -664,7 +681,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>open</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.231">open</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.236">open</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                     <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;cacheConf,
                     boolean&nbsp;canUseDropBehind)
                       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>
@@ -681,7 +698,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>computeHDFSBlocksDistribution</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.278">computeHDFSBlocksDistribution</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.283">computeHDFSBlocksDistribution</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)
                                                      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">Compute the HDFS Block Distribution for this StoreFile</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -694,7 +711,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>computeHDFSBlocksDistributionInternal</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.299">computeHDFSBlocksDistributionInternal</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.304">computeHDFSBlocksDistributionInternal</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)
                                                               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>
@@ -706,7 +723,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getReferencedFileStatus</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileStatus&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.314">getReferencedFileStatus</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)
+<pre>public&nbsp;org.apache.hadoop.fs.FileStatus&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.319">getReferencedFileStatus</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs)
                                                         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 the <code>FileStatus</code> of the file referenced by this StoreFileInfo</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>fs</code> - The current file system to use.</dd>
@@ -721,7 +738,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.355">getPath</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.360">getPath</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The <code>Path</code> of the file</dd></dl>
 </li>
 </ul>
@@ -731,7 +748,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileStatus</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileStatus&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.360">getFileStatus</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.FileStatus&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.365">getFileStatus</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">Returns:</span></dt><dd>The <code>FileStatus</code> of the file</dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -744,7 +761,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getModificationTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.365">getModificationTime</a>()
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.370">getModificationTime</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">Returns:</span></dt><dd>Get the modification time of the file.</dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -757,7 +774,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <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/regionserver/StoreFileInfo.html#line.370">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/regionserver/StoreFileInfo.html#line.375">toString</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#toString()" title="class or interface in java.lang">toString</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>
@@ -770,7 +787,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isHFile</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.379">isHFile</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.384">isHFile</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>path</code> - Path to check.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>True if the path has format of a HFile.</dd></dl>
 </li>
@@ -781,7 +798,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isHFile</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.383">isHFile</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>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.388">isHFile</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="isDelFile(org.apache.hadoop.fs.Path)">
@@ -790,7 +807,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isDelFile</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.392">isDelFile</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.397">isDelFile</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>path</code> - Path to check.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>True if the path has format of a del file.</dd></dl>
 </li>
@@ -801,7 +818,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isDelFile</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.400">isDelFile</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>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.405">isDelFile</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>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>fileName</code> - Sting version of path to validate.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>True if the file name has format of a del file.</dd></dl>
 </li>
@@ -812,7 +829,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isReference</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.409">isReference</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.414">isReference</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>path</code> - Path to check.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>True if the path has format of a HStoreFile reference.</dd></dl>
 </li>
@@ -823,18 +840,28 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isReference</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.417">isReference</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>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.422">isReference</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>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>name</code> - file name to check.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>True if the path has format of a HStoreFile reference.</dd></dl>
 </li>
 </ul>
+<a name="getCreatedTimestamp()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getCreatedTimestamp</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.430">getCreatedTimestamp</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>timestamp when this file was created (as returned by filesystem)</dd></dl>
+</li>
+</ul>
 <a name="getReferredToFile(org.apache.hadoop.fs.Path)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getReferredToFile</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.429">getReferredToFile</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.441">getReferredToFile</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 </li>
 </ul>
 <a name="validateStoreFileName(java.lang.String)">
@@ -843,7 +870,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>validateStoreFileName</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.458">validateStoreFileName</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>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.470">validateStoreFileName</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>
 <div class="block">Validate the store file name.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>fileName</code> - name of the file to validate</dd>
 <dt><span class="strong">Returns:</span></dt><dd><tt>true</tt> if the file could be a valid store file, <tt>false</tt> otherwise</dd></dl>
@@ -855,7 +882,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isValid</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.469">isValid</a>(org.apache.hadoop.fs.FileStatus&nbsp;fileStatus)
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.481">isValid</a>(org.apache.hadoop.fs.FileStatus&nbsp;fileStatus)
                        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">Return if the specified file is a valid store file or not.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>fileStatus</code> - The <code>FileStatus</code> of the file</dd>
@@ -870,7 +897,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>computeRefFileHDFSBlockDistribution</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.500">computeRefFileHDFSBlockDistribution</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.512">computeRefFileHDFSBlockDistribution</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                          <a href="../../../../../org/apache/hadoop/hbase/io/Reference.html" title="class in org.apache.hadoop.hbase.io">Reference</a>&nbsp;reference,
                                                          org.apache.hadoop.fs.FileStatus&nbsp;status)
                                                                    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>
@@ -893,7 +920,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.521">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;that)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.533">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;that)</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>
@@ -906,7 +933,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.547">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html#line.559">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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 49f97dc..a373330 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/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/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/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.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/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/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.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/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/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/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/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/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/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/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.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/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/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/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/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/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/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/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/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/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/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/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/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/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.Operation</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 6b02ffe..bdae472 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -140,9 +140,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.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/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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 4d2432f..6aea795 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -152,9 +152,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.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/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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 fda5448..4caaca8 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -379,40 +379,40 @@ 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_serverManager">
+<a name="m_frags">
 <!--   -->
 </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.122">m_serverManager</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_serverManager__IsNotDefault">
+<a name="m_frags__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.127">m_serverManager__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_catalogJanitorEnabled">
+<a name="m_format">
 <!--   -->
 </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.139">m_catalogJanitorEnabled</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/master/MasterStatusTmpl.ImplData.html#line.139">m_format</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled__IsNotDefault">
+<a name="m_format__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.144">m_catalogJanitorEnabled__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_deadServers">
@@ -451,22 +451,22 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.178">m_assignmentManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_servers">
 <!--   -->
 </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/master/MasterStatusTmpl.ImplData.html#line.190">m_format</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.190">m_servers</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_servers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.195">m_format__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.195">m_servers__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_filter">
@@ -487,58 +487,58 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation">
+<a name="m_serverManager">
 <!--   -->
 </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.224">m_metaLocation</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.224">m_serverManager</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation__IsNotDefault">
+<a name="m_serverManager__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.229">m_metaLocation__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.229">m_serverManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_servers">
+<a name="m_metaLocation">
 <!--   -->
 </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.241">m_servers</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.241">m_metaLocation</a></pre>
 </li>
 </ul>
-<a name="m_servers__IsNotDefault">
+<a name="m_metaLocation__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.246">m_servers__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.246">m_metaLocation__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_frags">
+<a name="m_catalogJanitorEnabled">
 <!--   -->
 </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.258">m_frags</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_frags__IsNotDefault">
+<a name="m_catalogJanitorEnabled__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.263">m_frags__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,58 +584,58 @@ 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="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </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.112">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>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="getServerManager()">
+<a name="getFrags()">
 <!--   -->
 </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.118">getServerManager</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="getServerManager__IsNotDefault()">
+<a name="getFrags__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.123">getServerManager__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="setCatalogJanitorEnabled(boolean)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </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.129">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">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="getCatalogJanitorEnabled()">
+<a name="getFormat()">
 <!--   -->
 </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.135">getCatalogJanitorEnabled</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/master/MasterStatusTmpl.ImplData.html#line.135">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled__IsNotDefault()">
+<a name="getFormat__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.140">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setDeadServers(java.util.Set)">
@@ -692,31 +692,31 @@ 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.174">getAssignmentManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">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>setServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">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="getFormat()">
+<a name="getServers()">
 <!--   -->
 </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/master/MasterStatusTmpl.ImplData.html#line.186">getFormat</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.186">getServers</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.191">getFormat__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.191">getServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setFilter(java.lang.String)">
@@ -746,85 +746,85 @@ 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.208">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </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.214">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
+<h4>setServerManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">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="getMetaLocation()">
+<a name="getServerManager()">
 <!--   -->
 </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.220">getMetaLocation</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.220">getServerManager</a>()</pre>
 </li>
 </ul>
-<a name="getMetaLocation__IsNotDefault()">
+<a name="getServerManager__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.225">getMetaLocation__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.225">getServerManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </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.231">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>setMetaLocation</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">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="getServers()">
+<a name="getMetaLocation()">
 <!--   -->
 </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.237">getServers</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.237">getMetaLocation</a>()</pre>
 </li>
 </ul>
-<a name="getServers__IsNotDefault()">
+<a name="getMetaLocation__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.242">getServers__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.242">getMetaLocation__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFrags(java.util.Map)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </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.248">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>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="getFrags()">
+<a name="getCatalogJanitorEnabled()">
 <!--   -->
 </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.254">getFrags</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="getFrags__IsNotDefault()">
+<a name="getCatalogJanitorEnabled__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.259">getFrags__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>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html
index 0cc571b..f0d9e09 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html
@@ -299,1507 +299,1514 @@
 <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>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @return True if this file was made by a major compaction.<a name="line.294"></a>
+<span class="sourceLineNo">294</span>   * @return True if this is HFile.<a name="line.294"></a>
 <span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public boolean isMajorCompaction() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (this.majorCompaction == null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throw new NullPointerException("This has not been set yet");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.majorCompaction.get();<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>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return True if this file should not be part of a minor compaction.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public boolean excludeFromMinorCompaction() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    return this.excludeFromMinorCompaction;<a name="line.307"></a>
+<span class="sourceLineNo">296</span>  public boolean isHFile() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.fileInfo.isHFile(this.fileInfo.getPath());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<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>   * @return True if this file was made by a major compaction.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public boolean isMajorCompaction() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    if (this.majorCompaction == null) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      throw new NullPointerException("This has not been set yet");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return this.majorCompaction.get();<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>  /**<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return This files maximum edit sequence id.<a name="line.311"></a>
+<span class="sourceLineNo">311</span>   * @return True if this file should not be part of a minor compaction.<a name="line.311"></a>
 <span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public long getMaxSequenceId() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return this.sequenceid;<a name="line.314"></a>
+<span class="sourceLineNo">313</span>  public boolean excludeFromMinorCompaction() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return this.excludeFromMinorCompaction;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Only used by the Striped Compaction Policy<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param key<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @return value associated with the metadata key<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return metadataMap.get(key);<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Return the largest memstoreTS found across all storefiles in<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * the given list. Store files that were created by a mapreduce<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * does not yet have any store files.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long max = 0;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (StoreFile sf : sfs) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!sf.isBulkLoadResult()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        max = Math.max(max, sf.getMaxMemstoreTS());<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>    return max;<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>   * Return the highest sequence ID found across all storefiles in<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * the given list.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param sfs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * does not yet have any store files.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long max = 0;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (StoreFile sf : sfs) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return max;<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>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Check if this storefile was created by bulk load.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * explicitly turned off.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @return true if this storefile was created by bulk load.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean isBulkLoadResult() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean bulkLoadedHFile = false;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    String fileName = this.getPath().getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (startPos != -1) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      bulkLoadedHFile = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @VisibleForTesting<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public boolean isCompactedAway() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (this.reader != null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return this.reader.isCompactedAway();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  @VisibleForTesting<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public int getRefCount() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return this.reader.refCount.get();<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>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Return the timestamp at which this bulk load file was generated.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public long getBulkLoadTimestamp() {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * calculated when store file is opened.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return this.fileInfo.getHDFSBlockDistribution();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return Reader for the store file.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IOException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @see #closeReader(boolean)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    if (this.reader != null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throw new IllegalAccessError("Already open");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // Open the StoreFile.Reader<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Read in our metadata.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (b != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // since store files are distinguished by sequence id, the one half would<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // subsume the other.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.sequenceid = Bytes.toLong(b);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      if (fileInfo.isTopReference()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        this.sequenceid += 1;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (isBulkLoadResult()){<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // generate the sequenceId from the fileName<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      String fileName = this.getPath().getName();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (startPos != -1) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            fileName.indexOf('_', startPos + 6)));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        // Handle reference files as done above.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (fileInfo.isTopReference()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // have the same row key but different seqIds.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      this.reader.setBulkLoaded(true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (b != null) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (b != null) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      boolean mc = Bytes.toBoolean(b);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (this.majorCompaction == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.majorCompaction.set(mc);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      this.majorCompaction = new AtomicBoolean(false);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (cfBloomType != BloomType.NONE) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (hfileBloomType != cfBloomType) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.info("HFile Bloom filter type for "<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            + "configuration");<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (timerangeBytes != null) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    } catch (IllegalArgumentException e) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          "proceeding without", e);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.reader.timeRangeTracker = null;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // initialize so we can reuse them after reader closed.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    firstKey = reader.getFirstKey();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    lastKey = reader.getLastKey();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    comparator = reader.getComparator();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.reader;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public Reader createReader() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return createReader(false);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * @return Reader for StoreFile. creates if necessary<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @throws IOException<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    if (this.reader == null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        this.reader = open(canUseDropBehind);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (IOException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        try {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          boolean evictOnClose =<a name="line.538"></a>
-<span class="sourceLineNo">539</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.539"></a>
-<span class="sourceLineNo">540</span>          this.closeReader(evictOnClose);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        } catch (IOException ee) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        throw e;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return this.reader;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<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>   * @return Current reader.  Must call createReader first else returns null.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @see #createReader()<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public Reader getReader() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this.reader;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @throws IOException<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   */<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (this.reader != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      this.reader.close(evictOnClose);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      this.reader = null;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * Marks the status of the file as compactedAway.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public void markCompactedAway() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    if (this.reader != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      this.reader.markCompactedAway();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * Delete this file<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @throws IOException<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  public void deleteReader() throws IOException {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    boolean evictOnClose =<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.585"></a>
-<span class="sourceLineNo">586</span>    closeReader(evictOnClose);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    this.fs.delete(getPath(), true);<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>  @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public String toString() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return this.fileInfo.toString();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public String toStringDetailed() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    StringBuilder sb = new StringBuilder();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    sb.append(this.getPath().toString());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    sb.append(", isReference=").append(isReference());<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (isBulkLoadResult()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return sb.toString();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @return Whether to skip resetting the sequence id.<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      justification="Will not overflow")<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  public static class WriterBuilder {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    private final Configuration conf;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final CacheConfig cacheConf;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private final FileSystem fs;<a name="line.630"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @return This files maximum edit sequence id.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public long getMaxSequenceId() {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this.sequenceid;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * Only used by the Striped Compaction Policy<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @param key<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @return value associated with the metadata key<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return metadataMap.get(key);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<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>   * Return the largest memstoreTS found across all storefiles in<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * the given list. Store files that were created by a mapreduce<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * does not yet have any store files.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    long max = 0;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (StoreFile sf : sfs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (!sf.isBulkLoadResult()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        max = Math.max(max, sf.getMaxMemstoreTS());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return max;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Return the highest sequence ID found across all storefiles in<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * the given list.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param sfs<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * does not yet have any store files.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    long max = 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    for (StoreFile sf : sfs) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return max;<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>  /**<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * Check if this storefile was created by bulk load.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * explicitly turned off.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @return true if this storefile was created by bulk load.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean isBulkLoadResult() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    boolean bulkLoadedHFile = false;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String fileName = this.getPath().getName();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (startPos != -1) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      bulkLoadedHFile = true;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @VisibleForTesting<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  public boolean isCompactedAway() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (this.reader != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return this.reader.isCompactedAway();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return true;<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>  @VisibleForTesting<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public int getRefCount() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return this.reader.refCount.get();<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 timestamp at which this bulk load file was generated.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public long getBulkLoadTimestamp() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * calculated when store file is opened.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return this.fileInfo.getHDFSBlockDistribution();<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>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return Reader for the store file.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @throws IOException<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @see #closeReader(boolean)<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (this.reader != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      throw new IllegalAccessError("Already open");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Open the StoreFile.Reader<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // Read in our metadata.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    if (b != null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // since store files are distinguished by sequence id, the one half would<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      // subsume the other.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      this.sequenceid = Bytes.toLong(b);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      if (fileInfo.isTopReference()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        this.sequenceid += 1;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (isBulkLoadResult()){<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // generate the sequenceId from the fileName<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      String fileName = this.getPath().getName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      if (startPos != -1) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            fileName.indexOf('_', startPos + 6)));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        // Handle reference files as done above.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        if (fileInfo.isTopReference()) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      // have the same row key but different seqIds.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      this.reader.setBulkLoaded(true);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (b != null) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    if (b != null) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      boolean mc = Bytes.toBoolean(b);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      if (this.majorCompaction == null) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      } else {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        this.majorCompaction.set(mc);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      this.majorCompaction = new AtomicBoolean(false);<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>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    if (cfBloomType != BloomType.NONE) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (hfileBloomType != cfBloomType) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        LOG.info("HFile Bloom filter type for "<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            + "configuration");<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (timerangeBytes != null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IllegalArgumentException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.520"></a>
+<span class="sourceLineNo">521</span>          "proceeding without", e);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      this.reader.timeRangeTracker = null;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // initialize so we can reuse them after reader closed.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    firstKey = reader.getFirstKey();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    lastKey = reader.getLastKey();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    comparator = reader.getComparator();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return this.reader;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>  public Reader createReader() throws IOException {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    return createReader(false);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>  /**<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @return Reader for StoreFile. creates if necessary<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @throws IOException<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (this.reader == null) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        this.reader = open(canUseDropBehind);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (IOException e) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        try {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          boolean evictOnClose =<a name="line.545"></a>
+<span class="sourceLineNo">546</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.546"></a>
+<span class="sourceLineNo">547</span>          this.closeReader(evictOnClose);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        } catch (IOException ee) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        throw e;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return this.reader;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * @return Current reader.  Must call createReader first else returns null.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @see #createReader()<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   */<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public Reader getReader() {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    return this.reader;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
+<span class="sourceLineNo">564</span><a name="line.564"></a>
+<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    if (this.reader != null) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.reader.close(evictOnClose);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.reader = null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<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>  /**<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * Marks the status of the file as compactedAway.<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void markCompactedAway() {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    if (this.reader != null) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.reader.markCompactedAway();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * Delete this file<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  public void deleteReader() throws IOException {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    boolean evictOnClose =<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.592"></a>
+<span class="sourceLineNo">593</span>    closeReader(evictOnClose);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    this.fs.delete(getPath(), true);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>  @Override<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  public String toString() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return this.fileInfo.toString();<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  public String toStringDetailed() {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    StringBuilder sb = new StringBuilder();<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    sb.append(this.getPath().toString());<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    sb.append(", isReference=").append(isReference());<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    if (isBulkLoadResult()) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return sb.toString();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return Whether to skip resetting the sequence id.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return false;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
 <span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    private BloomType bloomType = BloomType.NONE;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    private long maxKeyCount = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    private Path dir;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    private Path filePath;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    private InetSocketAddress[] favoredNodes;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    private HFileContext fileContext;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        FileSystem fs) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      this.conf = conf;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.cacheConf = cacheConf;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      this.fs = fs;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    }<a name="line.645"></a>
+<span class="sourceLineNo">632</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      justification="Will not overflow")<a name="line.633"></a>
+<span class="sourceLineNo">634</span>  public static class WriterBuilder {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    private final Configuration conf;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    private final CacheConfig cacheConf;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    private final FileSystem fs;<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    private BloomType bloomType = BloomType.NONE;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    private long maxKeyCount = 0;<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    private Path dir;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    private Path filePath;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    private InetSocketAddress[] favoredNodes;<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    private HFileContext fileContext;<a name="line.645"></a>
 <span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * @param dir Path to column family directory. The directory is created if<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *          does not exist. The file is given a unique name within this<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     *          directory.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     * @return this (for chained invocation)<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      Preconditions.checkNotNull(dir);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.dir = dir;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return this;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @param filePath the StoreFile path to write<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * @return this (for chained invocation)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     */<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      Preconditions.checkNotNull(filePath);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      this.filePath = filePath;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      return this;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    /**<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     * @return this (for chained invocation)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      this.favoredNodes = favoredNodes;<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      return this;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      Preconditions.checkNotNull(comparator);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      this.comparator = comparator;<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      return this;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      Preconditions.checkNotNull(bloomType);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      this.bloomType = bloomType;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      return this;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>    /**<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * @return this (for chained invocation)<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      this.maxKeyCount = maxKeyCount;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      return this;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      this.fileContext = fileContext;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      return this;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      return this;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    /**<a name="line.710"></a>
-<span class="sourceLineNo">711</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.711"></a>
-<span class="sourceLineNo">712</span>     * done. If metadata, add BEFORE closing using<a name="line.712"></a>
-<span class="sourceLineNo">713</span>     * {@link Writer#appendMetadata}.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>     */<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    public Writer build() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            "or file path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>      if (dir == null) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        dir = filePath.getParent();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>      if (!fs.exists(dir)) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        fs.mkdirs(dir);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (filePath == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        filePath = getUniqueFile(fs, dir);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        if (!BloomFilterFactory.isGeneralBloomEnabled(conf)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>          bloomType = BloomType.NONE;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">647</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        FileSystem fs) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.conf = conf;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      this.cacheConf = cacheConf;<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      this.fs = fs;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * @param dir Path to column family directory. The directory is created if<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     *          does not exist. The file is given a unique name within this<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *          directory.<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     * @return this (for chained invocation)<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      Preconditions.checkNotNull(dir);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.dir = dir;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      return this;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span>    /**<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * @param filePath the StoreFile path to write<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     * @return this (for chained invocation)<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      Preconditions.checkNotNull(filePath);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      this.filePath = filePath;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      return this;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    /**<a name="line.678"></a>
+<span class="sourceLineNo">679</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.679"></a>
+<span class="sourceLineNo">680</span>     * @return this (for chained invocation)<a name="line.680"></a>
+<span class="sourceLineNo">681</span>     */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      this.favoredNodes = favoredNodes;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      return this;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      Preconditions.checkNotNull(comparator);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      this.comparator = comparator;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      return this;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      Preconditions.checkNotNull(bloomType);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      this.bloomType = bloomType;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return this;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    /**<a name="line.699"></a>
+<span class="sourceLineNo">700</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.700"></a>
+<span class="sourceLineNo">701</span>     * @return this (for chained invocation)<a name="line.701"></a>
+<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      this.maxKeyCount = maxKeyCount;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return this;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      this.fileContext = fileContext;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      return this;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return this;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.718"></a>
+<span class="sourceLineNo">719</span>     * done. If metadata, add BEFORE closing using<a name="line.719"></a>
+<span class="sourceLineNo">720</span>     * {@link Writer#appendMetadata}.<a name="line.720"></a>
+<span class="sourceLineNo">721</span>     */<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    public Writer build() throws IOException {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.724"></a>
+<span class="sourceLineNo">725</span>            "or file path");<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (dir == null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        dir = filePath.getParent();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (!fs.exists(dir)) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        fs.mkdirs(dir);<a name="line.733"></a>
 <span class="sourceLineNo">734</span>      }<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (comparator == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        comparator = CellComparator.COMPARATOR;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      return new Writer(fs, filePath,<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          conf, cacheConf, comparator, bloomType, maxKeyCount, favoredNodes, fileContext);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  /**<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @param fs<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param dir Directory to create file in.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return random filename inside passed &lt;code&gt;dir&lt;/code&gt;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  public static Path getUniqueFile(final FileSystem fs, final Path dir)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throws IOException {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    if (!fs.getFileStatus(dir).isDirectory()) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new IOException("Expecting " + dir.toString() +<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        " to be a directory");<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return new Path(dir, UUID.randomUUID().toString().replaceAll("-", ""));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  public Long getMinimumTimestamp() {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return (getReader().timeRangeTracker == null) ?<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        null :<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        getReader().timeRangeTracker.getMinimumTimestamp();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * Gets the approximate mid-point of this file that is optimal for use in splitting it.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @param comparator Comparator used to compare KVs.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @return The split point row, or null if splitting is not possible, or reader is null.<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  @SuppressWarnings("deprecation")<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  byte[] getFileSplitPoint(CellComparator comparator) throws IOException {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    if (this.reader == null) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.warn("Storefile " + this + " Reader is null; cannot get split point");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return null;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    // Get first, last, and mid keys.  Midkey is the key that starts block<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // in middle of hfile.  Has column and timestamp.  Need to return just<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // the row we want to split on as midkey.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Cell midkey = this.reader.midkey();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    if (midkey != null) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Cell firstKey = this.reader.getFirstKey();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      Cell lastKey = this.reader.getLastKey();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      // if the midkey is the same as the first or last keys, we cannot (ever) split this region.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      if (comparator.compareRows(midkey, firstKey) == 0<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          || comparator.compareRows(midkey, lastKey) == 0) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (LOG.isDebugEnabled()) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("cannot split because midkey is the same as first or last row");<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        return null;<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return CellUtil.cloneRow(midkey);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return null;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * A StoreFile writer.  Use this to read/write HBase Store Files. It is package<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * local because it is an implementation detail of the HBase regionserver.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  public static class Writer implements Compactor.CellSink {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    private final BloomFilterWriter generalBloomFilterWriter;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    private final BloomFilterWriter deleteFamilyBloomFilterWriter;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    private final BloomType bloomType;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    private byte[] lastBloomKey;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    private int lastBloomKeyOffset, lastBloomKeyLen;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    private Cell lastCell = null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    private long earliestPutTs = HConstants.LATEST_TIMESTAMP;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    private Cell lastDeleteFamilyCell = null;<a name="line.807"></a>
-<span class

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/client/class-use/Connection.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Connection.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Connection.html
index e242dfa..118f4ec 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Connection.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Connection.html
@@ -1678,28 +1678,31 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#Canary.Monitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService)">Canary.Monitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#Canary.Monitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean)">Canary.Monitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                             <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;monitorTargets,
                             boolean&nbsp;useRegExp,
                             <a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
-                            <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor)</code>&nbsp;</td>
+                            <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
+                            boolean&nbsp;treatFailureAsError)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean,%20org.apache.hadoop.hbase.TableName)">Canary.RegionMonitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean,%20org.apache.hadoop.hbase.TableName,%20boolean)">Canary.RegionMonitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                         <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;monitorTargets,
                                         boolean&nbsp;useRegExp,
                                         <a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
                                         <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
                                         boolean&nbsp;writeSniffing,
-                                        <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;writeTableName)</code>&nbsp;</td>
+                                        <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;writeTableName,
+                                        boolean&nbsp;treatFailureAsError)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#Canary.RegionServerMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.ExtendedSink,%20java.util.concurrent.ExecutorService,%20boolean)">Canary.RegionServerMonitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#Canary.RegionServerMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.ExtendedSink,%20java.util.concurrent.ExecutorService,%20boolean,%20boolean)">Canary.RegionServerMonitor</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                                     <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;monitorTargets,
                                                     boolean&nbsp;useRegExp,
                                                     <a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.ExtendedSink</a>&nbsp;sink,
                                                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
-                                                    boolean&nbsp;allRegions)</code>&nbsp;</td>
+                                                    boolean&nbsp;allRegions,
+                                                    boolean&nbsp;treatFailureAsError)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#Canary.RegionServerTask(org.apache.hadoop.hbase.client.Connection,%20java.lang.String,%20org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.tool.Canary.ExtendedSink,%20java.util.concurrent.atomic.AtomicLong)">Canary.RegionServerTask</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
index 144be98..f7b2f4a 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Table.html
@@ -167,6 +167,14 @@ service.</div>
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hbase.archetypes.exemplars.client">org.apache.hbase.archetypes.exemplars.client</a></td>
+<td class="colLast">
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -1082,6 +1090,39 @@ service.</div>
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hbase.archetypes.exemplars.client">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> in <a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</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>(package private) static void</code></td>
+<td class="colLast"><span class="strong">HelloHBase.</span><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#deleteRow(org.apache.hadoop.hbase.client.Table)">deleteRow</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)</code>
+<div class="block">Invokes Table#delete to delete test data (i.e.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>(package private) static void</code></td>
+<td class="colLast"><span class="strong">HelloHBase.</span><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#getAndPrintRowContents(org.apache.hadoop.hbase.client.Table)">getAndPrintRowContents</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)</code>
+<div class="block">Invokes Table#get and prints out the contents of the retrieved row.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static void</code></td>
+<td class="colLast"><span class="strong">HelloHBase.</span><code><strong><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/HelloHBase.html#putRowToTable(org.apache.hadoop.hbase.client.Table)">putRowToTable</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&nbsp;table)</code>
+<div class="block">Invokes Table#put to store a row (with two new columns created 'on the
+ fly') into the table.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 92ce4fd..9de447b 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/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/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/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>
 <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/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/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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/client/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-use.html b/devapidocs/org/apache/hadoop/hbase/client/package-use.html
index e070981..d69418b 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-use.html
@@ -263,6 +263,14 @@ service.</div>
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.zookeeper">org.apache.hadoop.hbase.zookeeper</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hbase.archetypes.exemplars.client">org.apache.hbase.archetypes.exemplars.client</a></td>
+<td class="colLast">
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -2221,6 +2229,28 @@ service.</div>
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hbase.archetypes.exemplars.client">
+<!--   -->
+</a>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../../org/apache/hadoop/hbase/client/package-summary.html">org.apache.hadoop.hbase.client</a> used by <a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/Admin.html#org.apache.hbase.archetypes.exemplars.client">Admin</a>
+<div class="block">The administrative API for HBase.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/client/class-use/Table.html#org.apache.hbase.archetypes.exemplars.client">Table</a>
+<div class="block">Used to communicate with a single HBase table.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index 434ae88..dc0d7a6 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -96,8 +96,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.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="strong">ExecutorType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="strong">EventType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="strong">ExecutorType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 6da4c3a..52c2442 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/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/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/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/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/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/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/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/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/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/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">CompareFilter.CompareOp</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 00f06df..95a56d1 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/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/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/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/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/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/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/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/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/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType.BlockCategory</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 450d86b..a8ea334 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -267,10 +267,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.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/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/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">RowCounter.RowCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">TableSplit.Version</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 29eaaee..1aef94f 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/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>
-<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/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/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.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">SplitLogManager.ResubmitDirective</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 e5bf586..aaf26d9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -146,8 +146,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.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>
-<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/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">ServerProcedureInterface.ServerOperationType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 984c9b1..186e0be 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -361,14 +361,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.<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/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/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/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/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/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/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/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/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/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/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/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/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.Modify</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-use.html b/devapidocs/org/apache/hadoop/hbase/package-use.html
index 8f65fe9..7a5212b 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-use.html
@@ -388,6 +388,14 @@ service.</div>
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.zookeeper.lock">org.apache.hadoop.hbase.zookeeper.lock</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hbase.archetypes.exemplars.client">org.apache.hbase.archetypes.exemplars.client</a></td>
+<td class="colLast">
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -3832,6 +3840,23 @@ service.</div>
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hbase.archetypes.exemplars.client">
+<!--   -->
+</a>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a> used by <a href="../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/TableName.html#org.apache.hbase.archetypes.exemplars.client">TableName</a>
+<div class="block">Immutable POJO class for representing a table name.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 a73d0a7..19ef617 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/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>
+<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>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 9b10fff..995b01f 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -172,11 +172,11 @@
 <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/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/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>
 <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/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">OperationQuota.OperationType</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/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottlingException.Type</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
index dc4c603..b609724 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HMobStore.html
@@ -462,7 +462,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#add(org.apache.hadoop.hbase.Cell)">add</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#addChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">addChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#areWritesEnabled()">areWritesEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#assertBulkLoadHFileOk(org.apache.hadoop.fs.Path)">assertBulkLoadHFileOk</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#bulkLoadHFile(org.apache.hadoop.hbase.regionserver.StoreFileInfo)">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#bulkLoadHFile(java.lang.String,%20long)">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#cancelRequestedCompaction(org.apache.hadoop.hbase.regi
 onserver.compactions.CompactionContext)">cancelRequestedCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#canSplit()">canSplit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#closeAndArchiveCompactedFiles()">closeAndArchiveCompactedFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compact(org.apache.hadoop.hbase.regionserver.compactions.CompactionContext,%20org.apache.hadoop.hbase.regionserver.throttle.ThroughputController,%20org.apache.hadoop.hbase.security.User)">compact</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compactRecentForTestingAssumingDefaultPolicy(int)">compactRecentForTestingAssumingDefaultPolicy</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#completeCompaction(java.util.Collection)">completeCompaction</a>, <a hr
 ef="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createFlushContext(long)">createFlushContext</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp(long,%20org.apache.hadoop.hbase.io.compress.Compression.Algorithm,%20boolean,%20boolean,%20boolean)">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp(long,%20org.apache.hadoop.hbase.io.compress.Compression.Algorithm,%20boolean,%20boolean,%20boolean,%20boolean)">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#delete(org.apache.hadoop.hbase.KeyValue)">delete</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deleteChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">deleteChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deregisterChildren(org.apache.hadoop.hbase
 .conf.ConfigurationManager)">deregisterChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#determineTTLFromFamily(org.apache.hadoop.hbase.HColumnDescriptor)">determineTTLFromFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#flushCache(long,%20org.apache.hadoop.hbase.regionserver.MemStoreSnapshot,%20org.apache.hadoop.hbase.monitoring.MonitoredTask,%20org.apache.hadoop.hbase.regionserver.throttle.ThroughputController)">flushCache</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBlockingFileCount()">getBlockingFileCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBytesPerChecksum(org.apache.hadoop.conf.Configuration)">getBytesPerChecksum</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCacheConfig()">getCacheConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getChecksumType(org.apache
 .hadoop.conf.Configuration)">getChecksumType</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCloseCheckInterval()">getCloseCheckInterval</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getColumnFamilyName()">getColumnFamilyName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsCount()">getCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsSize()">getCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionCheckMultiplier()">getCompactionCheckMultiplier</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionPressure()">getCompactionPressure</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionProgress()">getCompactionProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver
 /HStore.html#getCompactPriority()">getCompactPriority</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getComparator()">getComparator</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCoprocessorHost()">getCoprocessorHost</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getDataBlockEncoder()">getDataBlockEncoder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFamily()">getFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFileSystem()">getFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushableSize()">getFlushableSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsCount()">getFlushedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsSize()">getFlushedCellsSize</a>, <a href="../../../..
 /../org/apache/hadoop/hbase/regionserver/HStore.html#getHRegion()">getHRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getLastCompactSize()">getLastCompactSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsCount()">getMajorCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsSize()">getMajorCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxMemstoreTS()">getMaxMemstoreTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxSequenceId()">getMaxSequenceId</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemstoreFlushSize()">getMemstoreFlushSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemStoreSize()">getMemStoreSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionser
 ver/HStore.html#getOffPeakHours()">getOffPeakHours</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionFileSystem()">getRegionFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionInfo()">getRegionInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanInfo()">getScanInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanner(org.apache.hadoop.hbase.client.Scan,%20java.util.NavigableSet,%20long)">getScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long)">getScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20
 byte[],%20byte[],%20long,%20boolean)">getScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSize()">getSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSmallestReadPoint()">getSmallestReadPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSnapshotSize()">getSnapshotSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSplitPoint()">getSplitPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreEngine()">getStoreEngine</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefiles()">getStorefiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesCount()">getStorefilesCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesIndexSize()">getStorefilesIndexSize</a>, <a href="../../../../../org/apache
 /hadoop/hbase/regionserver/HStore.html#getStorefilesSize()">getStorefilesSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreFileTtl()">getStoreFileTtl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.HRegionInfo,%20byte[])">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20java.lang.String,%20byte[])">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreSizeUncompressed()">getStoreSizeUncompressed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTableName()">getTableName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticBloomSize()">getTotalStaticBloomSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTot
 alStaticIndexSize()">getTotalStaticIndexSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasReferences()">hasReferences</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasTooManyStoreFiles()">hasTooManyStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#heapSize()">heapSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isCellTTLExpired(org.apache.hadoop.hbase.Cell,%20long,%20long)">isCellTTLExpired</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isMajorCompaction()">isMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isPrimaryReplicaStore()">isPrimaryReplicaStore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveFileIntoPlace(org.apache.hadoop.fs.Path)">moveFileIntoPlace</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#
 needsCompaction()">needsCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#onConfigurationChange(org.apache.hadoop.conf.Configuration)">onConfigurationChange</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles()">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles(java.util.Collection)">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#registerChildren(org.apache.hadoop.hbase.conf.ConfigurationManager)">registerChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles(java.util.Collection,%20java.util.Collection)">replaceStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replayCompactionMarker(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor,%20boolean,%20boolean)">replayCompactionMarker<
 /a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction()">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest)">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20org.apache.hadoop.hbase.security.User)">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#rollback(org.apache.hadoop.hbase.Cell)">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setDataBlockEncoderInTest(org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder)">setDataBlockEncoderInTest</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setScanInfo(org.apache.hadoop.hbase.regionserver.ScanInfo)">setScan
 Info</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#snapshot()">snapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#throttleCompaction(long)">throttleCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#timeOfOldestEdit()">timeOfOldestEdit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#triggerMajorCompaction()">triggerMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#updateColumnValue(byte[],%20byte[],%20byte[],%20long)">updateColumnValue</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#upsert(java.lang.Iterable,%20long)">upsert</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#versionsToReturn(int)">versionsToReturn</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#add(org.apache.hadoop.hbase.Cell)">add</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#addChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">addChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#areWritesEnabled()">areWritesEnabled</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#assertBulkLoadHFileOk(org.apache.hadoop.fs.Path)">assertBulkLoadHFileOk</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#bulkLoadHFile(org.apache.hadoop.hbase.regionserver.StoreFileInfo)">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#bulkLoadHFile(java.lang.String,%20long)">bulkLoadHFile</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#cancelRequestedCompaction(org.apache.hadoop.hbase.regi
 onserver.compactions.CompactionContext)">cancelRequestedCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#canSplit()">canSplit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#closeAndArchiveCompactedFiles()">closeAndArchiveCompactedFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compact(org.apache.hadoop.hbase.regionserver.compactions.CompactionContext,%20org.apache.hadoop.hbase.regionserver.throttle.ThroughputController,%20org.apache.hadoop.hbase.security.User)">compact</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#compactRecentForTestingAssumingDefaultPolicy(int)">compactRecentForTestingAssumingDefaultPolicy</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#completeCompaction(java.util.Collection)">completeCompaction</a>, <a hr
 ef="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createFlushContext(long)">createFlushContext</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp(long,%20org.apache.hadoop.hbase.io.compress.Compression.Algorithm,%20boolean,%20boolean,%20boolean)">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#createWriterInTmp(long,%20org.apache.hadoop.hbase.io.compress.Compression.Algorithm,%20boolean,%20boolean,%20boolean,%20boolean)">createWriterInTmp</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#delete(org.apache.hadoop.hbase.KeyValue)">delete</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deleteChangedReaderObserver(org.apache.hadoop.hbase.regionserver.ChangedReadersObserver)">deleteChangedReaderObserver</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#deregisterChildren(org.apache.hadoop.hbase
 .conf.ConfigurationManager)">deregisterChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#determineTTLFromFamily(org.apache.hadoop.hbase.HColumnDescriptor)">determineTTLFromFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#flushCache(long,%20org.apache.hadoop.hbase.regionserver.MemStoreSnapshot,%20org.apache.hadoop.hbase.monitoring.MonitoredTask,%20org.apache.hadoop.hbase.regionserver.throttle.ThroughputController)">flushCache</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getAvgStoreFileAge()">getAvgStoreFileAge</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBlockingFileCount()">getBlockingFileCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getBytesPerChecksum(org.apache.hadoop.conf.Configuration)">getBytesPerChecksum</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCacheConfig()">
 getCacheConfig</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getChecksumType(org.apache.hadoop.conf.Configuration)">getChecksumType</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCloseCheckInterval()">getCloseCheckInterval</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getColumnFamilyName()">getColumnFamilyName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsCount()">getCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactedCellsSize()">getCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionCheckMultiplier()">getCompactionCheckMultiplier</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactionPressure()">getCompactionPressure</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStor
 e.html#getCompactionProgress()">getCompactionProgress</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCompactPriority()">getCompactPriority</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getComparator()">getComparator</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getCoprocessorHost()">getCoprocessorHost</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getDataBlockEncoder()">getDataBlockEncoder</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFamily()">getFamily</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFileSystem()">getFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushableSize()">getFlushableSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsCount()">getFlushedCellsCount</a>, <a href="../../../../.
 ./org/apache/hadoop/hbase/regionserver/HStore.html#getFlushedCellsSize()">getFlushedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getHRegion()">getHRegion</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getLastCompactSize()">getLastCompactSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsCount()">getMajorCompactedCellsCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMajorCompactedCellsSize()">getMajorCompactedCellsSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxMemstoreTS()">getMaxMemstoreTS</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxSequenceId()">getMaxSequenceId</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMaxStoreFileAge()">getMaxStoreFileAge</a>, <a href="../../../../../org/apache/hadoop/hbase/regions
 erver/HStore.html#getMemstoreFlushSize()">getMemstoreFlushSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMemStoreSize()">getMemStoreSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getMinStoreFileAge()">getMinStoreFileAge</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getNumHFiles()">getNumHFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getNumReferenceFiles()">getNumReferenceFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getOffPeakHours()">getOffPeakHours</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionFileSystem()">getRegionFileSystem</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getRegionInfo()">getRegionInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanInfo()">getScanInfo</a>, <a href="../../../.
 ./../org/apache/hadoop/hbase/regionserver/HStore.html#getScanner(org.apache.hadoop.hbase.client.Scan,%20java.util.NavigableSet,%20long)">getScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long)">getScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getScanners(java.util.List,%20boolean,%20boolean,%20boolean,%20boolean,%20org.apache.hadoop.hbase.regionserver.ScanQueryMatcher,%20byte[],%20byte[],%20long,%20boolean)">getScanners</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSize()">getSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSmallestReadPoint()">getSmallestReadPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getSnapshotSize()">getSnapshotSize</a>, <a href="../../../../.
 ./org/apache/hadoop/hbase/regionserver/HStore.html#getSplitPoint()">getSplitPoint</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreEngine()">getStoreEngine</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefiles()">getStorefiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesCount()">getStorefilesCount</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesIndexSize()">getStorefilesIndexSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStorefilesSize()">getStorefilesSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreFileTtl()">getStoreFileTtl</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20org.apache.hadoop.hbase.HRegionInfo,%20byte[])">getStoreHomedir</a>, <a href="../../../../../org
 /apache/hadoop/hbase/regionserver/HStore.html#getStoreHomedir(org.apache.hadoop.fs.Path,%20java.lang.String,%20byte[])">getStoreHomedir</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getStoreSizeUncompressed()">getStoreSizeUncompressed</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTableName()">getTableName</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticBloomSize()">getTotalStaticBloomSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#getTotalStaticIndexSize()">getTotalStaticIndexSize</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasReferences()">hasReferences</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#hasTooManyStoreFiles()">hasTooManyStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#heapSize()">heapSize</a>, <a href="../../../../../org/a
 pache/hadoop/hbase/regionserver/HStore.html#isCellTTLExpired(org.apache.hadoop.hbase.Cell,%20long,%20long)">isCellTTLExpired</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isMajorCompaction()">isMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#isPrimaryReplicaStore()">isPrimaryReplicaStore</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#moveFileIntoPlace(org.apache.hadoop.fs.Path)">moveFileIntoPlace</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#needsCompaction()">needsCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#onConfigurationChange(org.apache.hadoop.conf.Configuration)">onConfigurationChange</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles()">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#refreshStoreFiles(j
 ava.util.Collection)">refreshStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#registerChildren(org.apache.hadoop.hbase.conf.ConfigurationManager)">registerChildren</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replaceStoreFiles(java.util.Collection,%20java.util.Collection)">replaceStoreFiles</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#replayCompactionMarker(org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor,%20boolean,%20boolean)">replayCompactionMarker</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction()">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest)">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#requestCompaction(int,%20
 org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest,%20org.apache.hadoop.hbase.security.User)">requestCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#rollback(org.apache.hadoop.hbase.Cell)">rollback</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setDataBlockEncoderInTest(org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder)">setDataBlockEncoderInTest</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#setScanInfo(org.apache.hadoop.hbase.regionserver.ScanInfo)">setScanInfo</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#snapshot()">snapshot</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#throttleCompaction(long)">throttleCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#timeOfOldestEdit()">timeOfOldestEdit</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HS
 tore.html#toString()">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#triggerMajorCompaction()">triggerMajorCompaction</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#updateColumnValue(byte[],%20byte[],%20byte[],%20long)">updateColumnValue</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#upsert(java.lang.Iterable,%20long)">upsert</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html#versionsToReturn(int)">versionsToReturn</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
index d9b54c2..26ed048 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2038">HStore.StoreFlusherImpl</a>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.html#line.2121">HStore.StoreFlusherImpl</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/regionserver/StoreFlushContext.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreFlushContext</a></pre>
 </li>
@@ -252,7 +252,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheFlushSeqNum</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2040">cacheFlushSeqNum</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2123">cacheFlushSeqNum</a></pre>
 </li>
 </ul>
 <a name="snapshot">
@@ -261,7 +261,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>snapshot</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSnapshot</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2041">snapshot</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSnapshot</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2124">snapshot</a></pre>
 </li>
 </ul>
 <a name="tempFiles">
@@ -270,7 +270,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>tempFiles</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; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2042">tempFiles</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;org.apache.hadoop.fs.Path&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2125">tempFiles</a></pre>
 </li>
 </ul>
 <a name="committedFiles">
@@ -279,7 +279,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>committedFiles</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; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2043">committedFiles</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;org.apache.hadoop.fs.Path&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2126">committedFiles</a></pre>
 </li>
 </ul>
 <a name="cacheFlushCount">
@@ -288,7 +288,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheFlushCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2044">cacheFlushCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2127">cacheFlushCount</a></pre>
 </li>
 </ul>
 <a name="cacheFlushSize">
@@ -297,7 +297,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cacheFlushSize</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2045">cacheFlushSize</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2128">cacheFlushSize</a></pre>
 </li>
 </ul>
 </li>
@@ -314,7 +314,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HStore.StoreFlusherImpl</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2047">HStore.StoreFlusherImpl</a>(long&nbsp;cacheFlushSeqNum)</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2130">HStore.StoreFlusherImpl</a>(long&nbsp;cacheFlushSeqNum)</pre>
 </li>
 </ul>
 </li>
@@ -331,7 +331,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>prepare</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2056">prepare</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2139">prepare</a>()</pre>
 <div class="block">This is not thread safe. The caller should have a lock on the region or the store.
  If necessary, the lock can be added with the patch provided in HBASE-10087</div>
 <dl>
@@ -346,7 +346,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>flushCache</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2065">flushCache</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2148">flushCache</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                 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/StoreFlushContext.html#flushCache(org.apache.hadoop.hbase.monitoring.MonitoredTask)">StoreFlushContext</a></code></strong></div>
 <div class="block">Flush the cache (create the new store file)
@@ -366,7 +366,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>commit</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2073">commit</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2156">commit</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                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/StoreFlushContext.html#commit(org.apache.hadoop.hbase.monitoring.MonitoredTask)">StoreFlushContext</a></code></strong></div>
 <div class="block">Commit the flush - add the store file to the store and clear the
@@ -389,7 +389,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>getCommittedFiles</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/HStore.StoreFlusherImpl.html#line.2112">getCommittedFiles</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;org.apache.hadoop.fs.Path&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2195">getCommittedFiles</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlushContext.html#getCommittedFiles()">StoreFlushContext</a></code></strong></div>
 <div class="block">Returns the newly committed files from the flush. Called only if commit returns true</div>
 <dl>
@@ -404,7 +404,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockList">
 <li class="blockList">
 <h4>replayFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2125">replayFlush</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/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;fileNames,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2208">replayFlush</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/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;fileNames,
                boolean&nbsp;dropMemstoreSnapshot)
                  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">Similar to commit, but called in secondary region replicas for replaying the
@@ -424,7 +424,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFlu
 <ul class="blockListLast">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2155">abort</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html#line.2238">abort</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">Abort the snapshot preparation. Drops the snapshot if any.</div>
 <dl>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html
index 0cc571b..f0d9e09 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html
@@ -299,1507 +299,1514 @@
 <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>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @return True if this file was made by a major compaction.<a name="line.294"></a>
+<span class="sourceLineNo">294</span>   * @return True if this is HFile.<a name="line.294"></a>
 <span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public boolean isMajorCompaction() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (this.majorCompaction == null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throw new NullPointerException("This has not been set yet");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.majorCompaction.get();<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>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return True if this file should not be part of a minor compaction.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public boolean excludeFromMinorCompaction() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    return this.excludeFromMinorCompaction;<a name="line.307"></a>
+<span class="sourceLineNo">296</span>  public boolean isHFile() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.fileInfo.isHFile(this.fileInfo.getPath());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<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>   * @return True if this file was made by a major compaction.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public boolean isMajorCompaction() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    if (this.majorCompaction == null) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      throw new NullPointerException("This has not been set yet");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return this.majorCompaction.get();<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>  /**<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return This files maximum edit sequence id.<a name="line.311"></a>
+<span class="sourceLineNo">311</span>   * @return True if this file should not be part of a minor compaction.<a name="line.311"></a>
 <span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public long getMaxSequenceId() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return this.sequenceid;<a name="line.314"></a>
+<span class="sourceLineNo">313</span>  public boolean excludeFromMinorCompaction() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return this.excludeFromMinorCompaction;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Only used by the Striped Compaction Policy<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param key<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @return value associated with the metadata key<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return metadataMap.get(key);<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Return the largest memstoreTS found across all storefiles in<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * the given list. Store files that were created by a mapreduce<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * does not yet have any store files.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long max = 0;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (StoreFile sf : sfs) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!sf.isBulkLoadResult()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        max = Math.max(max, sf.getMaxMemstoreTS());<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>    return max;<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>   * Return the highest sequence ID found across all storefiles in<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * the given list.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param sfs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * does not yet have any store files.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long max = 0;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (StoreFile sf : sfs) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return max;<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>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Check if this storefile was created by bulk load.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * explicitly turned off.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @return true if this storefile was created by bulk load.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean isBulkLoadResult() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean bulkLoadedHFile = false;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    String fileName = this.getPath().getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (startPos != -1) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      bulkLoadedHFile = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @VisibleForTesting<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public boolean isCompactedAway() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (this.reader != null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return this.reader.isCompactedAway();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  @VisibleForTesting<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public int getRefCount() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return this.reader.refCount.get();<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>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Return the timestamp at which this bulk load file was generated.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public long getBulkLoadTimestamp() {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * calculated when store file is opened.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return this.fileInfo.getHDFSBlockDistribution();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return Reader for the store file.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IOException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @see #closeReader(boolean)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    if (this.reader != null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throw new IllegalAccessError("Already open");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // Open the StoreFile.Reader<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Read in our metadata.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (b != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // since store files are distinguished by sequence id, the one half would<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // subsume the other.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.sequenceid = Bytes.toLong(b);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      if (fileInfo.isTopReference()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        this.sequenceid += 1;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (isBulkLoadResult()){<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // generate the sequenceId from the fileName<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      String fileName = this.getPath().getName();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (startPos != -1) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            fileName.indexOf('_', startPos + 6)));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        // Handle reference files as done above.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (fileInfo.isTopReference()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // have the same row key but different seqIds.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      this.reader.setBulkLoaded(true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (b != null) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (b != null) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      boolean mc = Bytes.toBoolean(b);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (this.majorCompaction == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.majorCompaction.set(mc);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      this.majorCompaction = new AtomicBoolean(false);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (cfBloomType != BloomType.NONE) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (hfileBloomType != cfBloomType) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.info("HFile Bloom filter type for "<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            + "configuration");<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (timerangeBytes != null) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    } catch (IllegalArgumentException e) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          "proceeding without", e);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.reader.timeRangeTracker = null;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // initialize so we can reuse them after reader closed.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    firstKey = reader.getFirstKey();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    lastKey = reader.getLastKey();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    comparator = reader.getComparator();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.reader;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public Reader createReader() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return createReader(false);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * @return Reader for StoreFile. creates if necessary<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @throws IOException<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    if (this.reader == null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        this.reader = open(canUseDropBehind);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (IOException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        try {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          boolean evictOnClose =<a name="line.538"></a>
-<span class="sourceLineNo">539</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.539"></a>
-<span class="sourceLineNo">540</span>          this.closeReader(evictOnClose);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        } catch (IOException ee) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        throw e;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return this.reader;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<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>   * @return Current reader.  Must call createReader first else returns null.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @see #createReader()<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public Reader getReader() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this.reader;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @throws IOException<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   */<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (this.reader != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      this.reader.close(evictOnClose);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      this.reader = null;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * Marks the status of the file as compactedAway.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public void markCompactedAway() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    if (this.reader != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      this.reader.markCompactedAway();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * Delete this file<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @throws IOException<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  public void deleteReader() throws IOException {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    boolean evictOnClose =<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.585"></a>
-<span class="sourceLineNo">586</span>    closeReader(evictOnClose);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    this.fs.delete(getPath(), true);<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>  @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public String toString() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return this.fileInfo.toString();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public String toStringDetailed() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    StringBuilder sb = new StringBuilder();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    sb.append(this.getPath().toString());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    sb.append(", isReference=").append(isReference());<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (isBulkLoadResult()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return sb.toString();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @return Whether to skip resetting the sequence id.<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      justification="Will not overflow")<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  public static class WriterBuilder {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    private final Configuration conf;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final CacheConfig cacheConf;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private final FileSystem fs;<a name="line.630"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @return This files maximum edit sequence id.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public long getMaxSequenceId() {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this.sequenceid;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * Only used by the Striped Compaction Policy<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @param key<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @return value associated with the metadata key<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return metadataMap.get(key);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<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>   * Return the largest memstoreTS found across all storefiles in<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * the given list. Store files that were created by a mapreduce<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * does not yet have any store files.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    long max = 0;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (StoreFile sf : sfs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (!sf.isBulkLoadResult()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        max = Math.max(max, sf.getMaxMemstoreTS());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return max;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Return the highest sequence ID found across all storefiles in<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * the given list.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param sfs<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * does not yet have any store files.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    long max = 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    for (StoreFile sf : sfs) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return max;<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>  /**<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * Check if this storefile was created by bulk load.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * explicitly turned off.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @return true if this storefile was created by bulk load.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean isBulkLoadResult() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    boolean bulkLoadedHFile = false;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String fileName = this.getPath().getName();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (startPos != -1) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      bulkLoadedHFile = true;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @VisibleForTesting<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  public boolean isCompactedAway() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (this.reader != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return this.reader.isCompactedAway();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return true;<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>  @VisibleForTesting<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public int getRefCount() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return this.reader.refCount.get();<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 timestamp at which this bulk load file was generated.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public long getBulkLoadTimestamp() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * calculated when store file is opened.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return this.fileInfo.getHDFSBlockDistribution();<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>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return Reader for the store file.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @throws IOException<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @see #closeReader(boolean)<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (this.reader != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      throw new IllegalAccessError("Already open");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Open the StoreFile.Reader<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // Read in our metadata.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    if (b != null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // since store files are distinguished by sequence id, the one half would<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      // subsume the other.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      this.sequenceid = Bytes.toLong(b);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      if (fileInfo.isTopReference()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        this.sequenceid += 1;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (isBulkLoadResult()){<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // generate the sequenceId from the fileName<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      String fileName = this.getPath().getName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      if (startPos != -1) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            fileName.indexOf('_', startPos + 6)));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        // Handle reference files as done above.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        if (fileInfo.isTopReference()) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      // have the same row key but different seqIds.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      this.reader.setBulkLoaded(true);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (b != null) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    if (b != null) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      boolean mc = Bytes.toBoolean(b);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      if (this.majorCompaction == null) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      } else {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        this.majorCompaction.set(mc);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      this.majorCompaction = new AtomicBoolean(false);<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>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    if (cfBloomType != BloomType.NONE) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (hfileBloomType != cfBloomType) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        LOG.info("HFile Bloom filter type for "<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            + "configuration");<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (timerangeBytes != null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IllegalArgumentException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.520"></a>
+<span class="sourceLineNo">521</span>          "proceeding without", e);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      this.reader.timeRangeTracker = null;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // initialize so we can reuse them after reader closed.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    firstKey = reader.getFirstKey();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    lastKey = reader.getLastKey();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    comparator = reader.getComparator();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return this.reader;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>  public Reader createReader() throws IOException {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    return createReader(false);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>  /**<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @return Reader for StoreFile. creates if necessary<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @throws IOException<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (this.reader == null) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        this.reader = open(canUseDropBehind);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (IOException e) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        try {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          boolean evictOnClose =<a name="line.545"></a>
+<span class="sourceLineNo">546</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.546"></a>
+<span class="sourceLineNo">547</span>          this.closeReader(evictOnClose);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        } catch (IOException ee) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        throw e;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return this.reader;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * @return Current reader.  Must call createReader first else returns null.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @see #createReader()<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   */<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public Reader getReader() {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    return this.reader;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
+<span class="sourceLineNo">564</span><a name="line.564"></a>
+<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    if (this.reader != null) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.reader.close(evictOnClose);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.reader = null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<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>  /**<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * Marks the status of the file as compactedAway.<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void markCompactedAway() {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    if (this.reader != null) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.reader.markCompactedAway();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * Delete this file<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  public void deleteReader() throws IOException {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    boolean evictOnClose =<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.592"></a>
+<span class="sourceLineNo">593</span>    closeReader(evictOnClose);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    this.fs.delete(getPath(), true);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>  @Override<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  public String toString() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return this.fileInfo.toString();<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  public String toStringDetailed() {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    StringBuilder sb = new StringBuilder();<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    sb.append(this.getPath().toString());<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    sb.append(", isReference=").append(isReference());<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    if (isBulkLoadResult()) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return sb.toString();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return Whether to skip resetting the sequence id.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return false;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
 <span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    private BloomType bloomType = BloomType.NONE;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    private long maxKeyCount = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    private Path dir;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    private Path filePath;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    private InetSocketAddress[] favoredNodes;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    private HFileContext fileContext;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        FileSystem fs) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      this.conf = conf;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.cacheConf = cacheConf;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      this.fs = fs;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    }<a name="line.645"></a>
+<span class="sourceLineNo">632</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      justification="Will not overflow")<a name="line.633"></a>
+<span class="sourceLineNo">634</span>  public static class WriterBuilder {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    private final Configuration conf;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    private final CacheConfig cacheConf;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    private final FileSystem fs;<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    private BloomType bloomType = BloomType.NONE;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    private long maxKeyCount = 0;<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    private Path dir;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    private Path filePath;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    private InetSocketAddress[] favoredNodes;<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    private HFileContext fileContext;<a name="line.645"></a>
 <span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * @param dir Path to column family directory. The directory is created if<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *          does not exist. The file is given a unique name within this<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     *          directory.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     * @return this (for chained invocation)<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      Preconditions.checkNotNull(dir);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.dir = dir;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return this;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @param filePath the StoreFile path to write<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * @return this (for chained invocation)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     */<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      Preconditions.checkNotNull(filePath);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      this.filePath = filePath;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      return this;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    /**<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     * @return this (for chained invocation)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      this.favoredNodes = favoredNodes;<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      return this;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      Preconditions.checkNotNull(comparator);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      this.comparator = comparator;<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      return this;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      Preconditions.checkNotNull(bloomType);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      this.bloomType = bloomType;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      return this;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>    /**<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * @return this (for chained invocation)<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      this.maxKeyCount = maxKeyCount;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      return this;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      this.fileContext = fileContext;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      return this;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      return this;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    /**<a name="line.710"></a>
-<span class="sourceLineNo">711</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.711"></a>
-<span class="sourceLineNo">712</span>     * done. If metadata, add BEFORE closing using<a name="line.712"></a>
-<span class="sourceLineNo">713</span>     * {@link Writer#appendMetadata}.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>     */<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    public Writer build() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            "or file path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>      if (dir == null) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        dir = filePath.getParent();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>      if (!fs.exists(dir)) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        fs.mkdirs(dir);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (filePath == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        filePath = getUniqueFile(fs, dir);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        if (!BloomFilterFactory.isGeneralBloomEnabled(conf)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>          bloomType = BloomType.NONE;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">647</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        FileSystem fs) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.conf = conf;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      this.cacheConf = cacheConf;<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      this.fs = fs;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * @param dir Path to column family directory. The directory is created if<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     *          does not exist. The file is given a unique name within this<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *          directory.<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     * @return this (for chained invocation)<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      Preconditions.checkNotNull(dir);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.dir = dir;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      return this;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span>    /**<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * @param filePath the StoreFile path to write<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     * @return this (for chained invocation)<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      Preconditions.checkNotNull(filePath);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      this.filePath = filePath;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      return this;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    /**<a name="line.678"></a>
+<span class="sourceLineNo">679</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.679"></a>
+<span class="sourceLineNo">680</span>     * @return this (for chained invocation)<a name="line.680"></a>
+<span class="sourceLineNo">681</span>     */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      this.favoredNodes = favoredNodes;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      return this;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      Preconditions.checkNotNull(comparator);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      this.comparator = comparator;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      return this;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      Preconditions.checkNotNull(bloomType);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      this.bloomType = bloomType;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return this;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    /**<a name="line.699"></a>
+<span class="sourceLineNo">700</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.700"></a>
+<span class="sourceLineNo">701</span>     * @return this (for chained invocation)<a name="line.701"></a>
+<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      this.maxKeyCount = maxKeyCount;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return this;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      this.fileContext = fileContext;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      return this;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return this;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.718"></a>
+<span class="sourceLineNo">719</span>     * done. If metadata, add BEFORE closing using<a name="line.719"></a>
+<span class="sourceLineNo">720</span>     * {@link Writer#appendMetadata}.<a name="line.720"></a>
+<span class="sourceLineNo">721</span>     */<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    public Writer build() throws IOException {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.724"></a>
+<span class="sourceLineNo">725</span>            "or file path");<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (dir == null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        dir = filePath.getParent();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (!fs.exists(dir)) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        fs.mkdirs(dir);<a name="line.733"></a>
 <span class="sourceLineNo">734</span>      }<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (comparator == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        comparator = CellComparator.COMPARATOR;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      return new Writer(fs, filePath,<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          conf, cacheConf, comparator, bloomType, maxKeyCount, favoredNodes, fileContext);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  /**<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @param fs<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param dir Directory to create file in.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return random filename inside passed &lt;code&gt;dir&lt;/code&gt;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  public static Path getUniqueFile(final FileSystem fs, final Path dir)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throws IOException {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    if (!fs.getFileStatus(dir).isDirectory()) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new IOException("Expecting " + dir.toString() +<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        " to be a directory");<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return new Path(dir, UUID.randomUUID().toString().replaceAll("-", ""));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  public Long getMinimumTimestamp() {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return (getReader().timeRangeTracker == null) ?<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        null :<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        getReader().timeRangeTracker.getMinimumTimestamp();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * Gets the approximate mid-point of this file that is optimal for use in splitting it.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @param comparator Comparator used to compare KVs.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @return The split point row, or null if splitting is not possible, or reader is null.<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  @SuppressWarnings("deprecation")<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  byte[] getFileSplitPoint(CellComparator comparator) throws IOException {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    if (this.reader == null) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.warn("Storefile " + this + " Reader is null; cannot get split point");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return null;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    // Get first, last, and mid keys.  Midkey is the key that starts block<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // in middle of hfile.  Has column and timestamp.  Need to return just<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // the row we want to split on as midkey.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Cell midkey = this.reader.midkey();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    if (midkey != null) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Cell firstKey = this.reader.getFirstKey();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      Cell lastKey = this.reader.getLastKey();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      // if the midkey is the same as the first or last keys, we cannot (ever) split this region.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      if (comparator.compareRows(midkey, firstKey) == 0<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          || comparator.compareRows(midkey, lastKey) == 0) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (LOG.isDebugEnabled()) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("cannot split because midkey is the same as first or last row");<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        return null;<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return CellUtil.cloneRow(midkey);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return null;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * A StoreFile writer.  Use this to read/write HBase Store Files. It is package<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * local because it is an implementation detail of the HBase regionserver.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  public static class Writer implements Compactor.CellSink {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    private final BloomFilterWriter generalBloomFilterWriter;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    private final BloomFilterWriter deleteFamilyBloomFilterWriter;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    private final BloomType bloomType;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    private byte[] lastBloomKey;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    private int lastBloomKeyOffset, lastBloomKeyLen;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    private Cell lastCell = null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    private long earliestPutTs = HConstants.LATEST_TIMESTAMP;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    private

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html
index 76ab3e2..1160176 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.html
@@ -163,194 +163,202 @@
 <span class="sourceLineNo">155</span>  String MEMSTORE_SIZE = "memStoreSize";<a name="line.155"></a>
 <span class="sourceLineNo">156</span>  String MEMSTORE_SIZE_DESC = "Size of the memstore";<a name="line.156"></a>
 <span class="sourceLineNo">157</span>  String STOREFILE_SIZE = "storeFileSize";<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  String STOREFILE_SIZE_DESC = "Size of storefiles being served.";<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  String TOTAL_REQUEST_COUNT = "totalRequestCount";<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  String TOTAL_REQUEST_COUNT_DESC =<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      "Total number of requests this RegionServer has answered.";<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  String READ_REQUEST_COUNT = "readRequestCount";<a name="line.162"></a>
-<span class="sourceLineNo">163</span>  String READ_REQUEST_COUNT_DESC =<a name="line.163"></a>
-<span class="sourceLineNo">164</span>      "Number of read requests this region server has answered.";<a name="line.164"></a>
-<span class="sourceLineNo">165</span>  String FILTERED_READ_REQUEST_COUNT = "filteredReadRequestCount";<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  String FILTERED_READ_REQUEST_COUNT_DESC =<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    "Number of filtered read requests this region server has answered.";<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  String WRITE_REQUEST_COUNT = "writeRequestCount";<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  String WRITE_REQUEST_COUNT_DESC =<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      "Number of mutation requests this region server has answered.";<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  String CHECK_MUTATE_FAILED_COUNT = "checkMutateFailedCount";<a name="line.171"></a>
-<span class="sourceLineNo">172</span>  String CHECK_MUTATE_FAILED_COUNT_DESC =<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      "Number of Check and Mutate calls that failed the checks.";<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  String CHECK_MUTATE_PASSED_COUNT = "checkMutatePassedCount";<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  String CHECK_MUTATE_PASSED_COUNT_DESC =<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      "Number of Check and Mutate calls that passed the checks.";<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  String STOREFILE_INDEX_SIZE = "storeFileIndexSize";<a name="line.177"></a>
-<span class="sourceLineNo">178</span>  String STOREFILE_INDEX_SIZE_DESC = "Size of indexes in storefiles on disk.";<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  String STATIC_INDEX_SIZE = "staticIndexSize";<a name="line.179"></a>
-<span class="sourceLineNo">180</span>  String STATIC_INDEX_SIZE_DESC = "Uncompressed size of the static indexes.";<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  String STATIC_BLOOM_SIZE = "staticBloomSize";<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  String STATIC_BLOOM_SIZE_DESC =<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      "Uncompressed size of the static bloom filters.";<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  String NUMBER_OF_MUTATIONS_WITHOUT_WAL = "mutationsWithoutWALCount";<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  String NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC =<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      "Number of mutations that have been sent by clients with the write ahead logging turned off.";<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  String DATA_SIZE_WITHOUT_WAL = "mutationsWithoutWALSize";<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  String DATA_SIZE_WITHOUT_WAL_DESC =<a name="line.188"></a>
-<span class="sourceLineNo">189</span>      "Size of data that has been sent by clients with the write ahead logging turned off.";<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  String PERCENT_FILES_LOCAL = "percentFilesLocal";<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  String PERCENT_FILES_LOCAL_DESC =<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      "The percent of HFiles that are stored on the local hdfs data node.";<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  String PERCENT_FILES_LOCAL_SECONDARY_REGIONS = "percentFilesLocalSecondaryRegions";<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  String PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC =<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    "The percent of HFiles used by secondary regions that are stored on the local hdfs data node.";<a name="line.195"></a>
-<span class="sourceLineNo">196</span>  String SPLIT_QUEUE_LENGTH = "splitQueueLength";<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  String SPLIT_QUEUE_LENGTH_DESC = "Length of the queue for splits.";<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  String COMPACTION_QUEUE_LENGTH = "compactionQueueLength";<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  String LARGE_COMPACTION_QUEUE_LENGTH = "largeCompactionQueueLength";<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  String SMALL_COMPACTION_QUEUE_LENGTH = "smallCompactionQueueLength";<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  String COMPACTION_QUEUE_LENGTH_DESC = "Length of the queue for compactions.";<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  String FLUSH_QUEUE_LENGTH = "flushQueueLength";<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  String FLUSH_QUEUE_LENGTH_DESC = "Length of the queue for region flushes";<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  String BLOCK_CACHE_FREE_SIZE = "blockCacheFreeSize";<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  String BLOCK_CACHE_FREE_DESC =<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      "Size of the block cache that is not occupied.";<a name="line.206"></a>
-<span class="sourceLineNo">207</span>  String BLOCK_CACHE_COUNT = "blockCacheCount";<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  String BLOCK_CACHE_COUNT_DESC = "Number of block in the block cache.";<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  String BLOCK_CACHE_SIZE = "blockCacheSize";<a name="line.209"></a>
-<span class="sourceLineNo">210</span>  String BLOCK_CACHE_SIZE_DESC = "Size of the block cache.";<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  String BLOCK_CACHE_HIT_COUNT = "blockCacheHitCount";<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  String BLOCK_CACHE_HIT_COUNT_DESC = "Count of the hit on the block cache.";<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  String BLOCK_CACHE_PRIMARY_HIT_COUNT = "blockCacheHitCountPrimary";<a name="line.213"></a>
-<span class="sourceLineNo">214</span>  String BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC = "Count of hit on primary replica in the block cache.";<a name="line.214"></a>
-<span class="sourceLineNo">215</span>  String BLOCK_CACHE_MISS_COUNT = "blockCacheMissCount";<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  String BLOCK_COUNT_MISS_COUNT_DESC =<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      "Number of requests for a block that missed the block cache.";<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  String BLOCK_CACHE_PRIMARY_MISS_COUNT = "blockCacheMissCountPrimary";<a name="line.218"></a>
-<span class="sourceLineNo">219</span>  String BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC =<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      "Number of requests for a block of primary replica that missed the block cache.";<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  String BLOCK_CACHE_EVICTION_COUNT = "blockCacheEvictionCount";<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  String BLOCK_CACHE_EVICTION_COUNT_DESC =<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      "Count of the number of blocks evicted from the block cache.";<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  String BLOCK_CACHE_PRIMARY_EVICTION_COUNT = "blockCacheEvictionCountPrimary";<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  String BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC =<a name="line.225"></a>
-<span class="sourceLineNo">226</span>      "Count of the number of blocks evicted from primary replica in the block cache.";<a name="line.226"></a>
-<span class="sourceLineNo">227</span>  String BLOCK_CACHE_HIT_PERCENT = "blockCacheCountHitPercent";<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  String BLOCK_CACHE_HIT_PERCENT_DESC =<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      "Percent of block cache requests that are hits";<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  String BLOCK_CACHE_EXPRESS_HIT_PERCENT = "blockCacheExpressHitPercent";<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  String BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC =<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      "The percent of the time that requests with the cache turned on hit the cache.";<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  String BLOCK_CACHE_FAILED_INSERTION_COUNT = "blockCacheFailedInsertionCount";<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  String BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC = "Number of times that a block cache " +<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      "insertion failed. Usually due to size restrictions.";<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  String RS_START_TIME_NAME = "regionServerStartTime";<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  String ZOOKEEPER_QUORUM_NAME = "zookeeperQuorum";<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  String SERVER_NAME_NAME = "serverName";<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  String CLUSTER_ID_NAME = "clusterId";<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  String RS_START_TIME_DESC = "RegionServer Start Time";<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  String ZOOKEEPER_QUORUM_DESC = "Zookeeper Quorum";<a name="line.241"></a>
-<span class="sourceLineNo">242</span>  String SERVER_NAME_DESC = "Server Name";<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  String CLUSTER_ID_DESC = "Cluster Id";<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  String UPDATES_BLOCKED_TIME = "updatesBlockedTime";<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  String UPDATES_BLOCKED_DESC =<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      "Number of MS updates have been blocked so that the memstore can be flushed.";<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  String DELETE_KEY = "delete";<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  String GET_KEY = "get";<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  String INCREMENT_KEY = "increment";<a name="line.249"></a>
-<span class="sourceLineNo">250</span>  String MUTATE_KEY = "mutate";<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  String APPEND_KEY = "append";<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  String REPLAY_KEY = "replay";<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  String SCAN_NEXT_KEY = "scanNext";<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  String SLOW_MUTATE_KEY = "slowPutCount";<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  String SLOW_GET_KEY = "slowGetCount";<a name="line.255"></a>
-<span class="sourceLineNo">256</span>  String SLOW_DELETE_KEY = "slowDeleteCount";<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  String SLOW_INCREMENT_KEY = "slowIncrementCount";<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  String SLOW_APPEND_KEY = "slowAppendCount";<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  String SLOW_MUTATE_DESC =<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      "The number of Multis that took over 1000ms to complete";<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  String SLOW_DELETE_DESC =<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      "The number of Deletes that took over 1000ms to complete";<a name="line.262"></a>
-<span class="sourceLineNo">263</span>  String SLOW_GET_DESC = "The number of Gets that took over 1000ms to complete";<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  String SLOW_INCREMENT_DESC =<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      "The number of Increments that took over 1000ms to complete";<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  String SLOW_APPEND_DESC =<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      "The number of Appends that took over 1000ms to complete";<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  String FLUSHED_CELLS = "flushedCellsCount";<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  String FLUSHED_CELLS_DESC = "The number of cells flushed to disk";<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  String FLUSHED_CELLS_SIZE = "flushedCellsSize";<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  String FLUSHED_CELLS_SIZE_DESC = "The total amount of data flushed to disk, in bytes";<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  String COMPACTED_CELLS = "compactedCellsCount";<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  String COMPACTED_CELLS_DESC = "The number of cells processed during minor compactions";<a name="line.274"></a>
-<span class="sourceLineNo">275</span>  String COMPACTED_CELLS_SIZE = "compactedCellsSize";<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  String COMPACTED_CELLS_SIZE_DESC =<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      "The total amount of data processed during minor compactions, in bytes";<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  String MAJOR_COMPACTED_CELLS = "majorCompactedCellsCount";<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  String MAJOR_COMPACTED_CELLS_DESC =<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      "The number of cells processed during major compactions";<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  String MAJOR_COMPACTED_CELLS_SIZE = "majorCompactedCellsSize";<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  String MAJOR_COMPACTED_CELLS_SIZE_DESC =<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      "The total amount of data processed during major compactions, in bytes";<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  String CELLS_COUNT_COMPACTED_TO_MOB = "cellsCountCompactedToMob";<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  String CELLS_COUNT_COMPACTED_TO_MOB_DESC =<a name="line.285"></a>
-<span class="sourceLineNo">286</span>      "The number of cells moved to mob during compaction";<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  String CELLS_COUNT_COMPACTED_FROM_MOB = "cellsCountCompactedFromMob";<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  String CELLS_COUNT_COMPACTED_FROM_MOB_DESC =<a name="line.288"></a>
-<span class="sourceLineNo">289</span>      "The number of cells moved from mob during compaction";<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  String CELLS_SIZE_COMPACTED_TO_MOB = "cellsSizeCompactedToMob";<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  String CELLS_SIZE_COMPACTED_TO_MOB_DESC =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      "The total amount of cells move to mob during compaction, in bytes";<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  String CELLS_SIZE_COMPACTED_FROM_MOB = "cellsSizeCompactedFromMob";<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  String CELLS_SIZE_COMPACTED_FROM_MOB_DESC =<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      "The total amount of cells move from mob during compaction, in bytes";<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  String MOB_FLUSH_COUNT = "mobFlushCount";<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  String MOB_FLUSH_COUNT_DESC = "The number of the flushes in mob-enabled stores";<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  String MOB_FLUSHED_CELLS_COUNT = "mobFlushedCellsCount";<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  String MOB_FLUSHED_CELLS_COUNT_DESC = "The number of mob cells flushed to disk";<a name="line.299"></a>
-<span class="sourceLineNo">300</span>  String MOB_FLUSHED_CELLS_SIZE = "mobFlushedCellsSize";<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  String MOB_FLUSHED_CELLS_SIZE_DESC = "The total amount of mob cells flushed to disk, in bytes";<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  String MOB_SCAN_CELLS_COUNT = "mobScanCellsCount";<a name="line.302"></a>
-<span class="sourceLineNo">303</span>  String MOB_SCAN_CELLS_COUNT_DESC = "The number of scanned mob cells";<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  String MOB_SCAN_CELLS_SIZE = "mobScanCellsSize";<a name="line.304"></a>
-<span class="sourceLineNo">305</span>  String MOB_SCAN_CELLS_SIZE_DESC = "The total amount of scanned mob cells, in bytes";<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  String MOB_FILE_CACHE_ACCESS_COUNT = "mobFileCacheAccessCount";<a name="line.306"></a>
-<span class="sourceLineNo">307</span>  String MOB_FILE_CACHE_ACCESS_COUNT_DESC = "The count of accesses to the mob file cache";<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  String MOB_FILE_CACHE_MISS_COUNT = "mobFileCacheMissCount";<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  String MOB_FILE_CACHE_MISS_COUNT_DESC = "The count of misses to the mob file cache";<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  String MOB_FILE_CACHE_HIT_PERCENT = "mobFileCacheHitPercent";<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  String MOB_FILE_CACHE_HIT_PERCENT_DESC = "The hit percent to the mob file cache";<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  String MOB_FILE_CACHE_EVICTED_COUNT = "mobFileCacheEvictedCount";<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  String MOB_FILE_CACHE_EVICTED_COUNT_DESC = "The number of items evicted from the mob file cache";<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  String MOB_FILE_CACHE_COUNT = "mobFileCacheCount";<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  String MOB_FILE_CACHE_COUNT_DESC = "The count of cached mob files";<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  String HEDGED_READS = "hedgedReads";<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  String HEDGED_READS_DESC = "The number of times we started a hedged read";<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  String HEDGED_READ_WINS = "hedgedReadWins";<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  String HEDGED_READ_WINS_DESC =<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      "The number of times we started a hedged read and a hedged read won";<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>  String BLOCKED_REQUESTS_COUNT = "blockedRequestCount";<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  String BLOCKED_REQUESTS_COUNT_DESC = "The number of blocked requests because of memstore size is "<a name="line.324"></a>
-<span class="sourceLineNo">325</span>      + "larger than blockingMemStoreSize";<a name="line.325"></a>
-<span class="sourceLineNo">326</span><a name="line.326"></a>
-<span class="sourceLineNo">327</span>  String SPLIT_KEY = "splitTime";<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  String SPLIT_REQUEST_KEY = "splitRequestCount";<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  String SPLIT_REQUEST_DESC = "Number of splits requested";<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  String SPLIT_SUCCESS_KEY = "splitSuccessCount";<a name="line.330"></a>
-<span class="sourceLineNo">331</span>  String SPLIT_SUCCESS_DESC = "Number of successfully executed splits";<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  String FLUSH_KEY = "flushTime";<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  String RPC_GET_REQUEST_COUNT = "rpcGetRequestCount";<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  String RPC_GET_REQUEST_COUNT_DESC = "Number of rpc get requests this region server has answered.";<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  String RPC_SCAN_REQUEST_COUNT = "rpcScanRequestCount";<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  String RPC_SCAN_REQUEST_COUNT_DESC =<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      "Number of rpc scan requests this region server has answered.";<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  String RPC_MULTI_REQUEST_COUNT = "rpcMultiRequestCount";<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  String RPC_MULTI_REQUEST_COUNT_DESC =<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      "Number of rpc multi requests this region server has answered.";<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  String RPC_MUTATE_REQUEST_COUNT = "rpcMutateRequestCount";<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  String RPC_MUTATE_REQUEST_COUNT_DESC =<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      "Number of rpc mutation requests this region server has answered.";<a name="line.344"></a>
-<span class="sourceLineNo">345</span>}<a name="line.345"></a>
+<span class="sourceLineNo">158</span>  String MAX_STORE_FILE_AGE = "maxStoreFileAge";<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  String MIN_STORE_FILE_AGE = "minStoreFileAge";<a name="line.159"></a>
+<span class="sourceLineNo">160</span>  String AVG_STORE_FILE_AGE = "avgStoreFileAge";<a name="line.160"></a>
+<span class="sourceLineNo">161</span>  String NUM_REFERENCE_FILES = "numReferenceFiles";<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  String MAX_STORE_FILE_AGE_DESC = "Max age of store files hosted on this region server";<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  String MIN_STORE_FILE_AGE_DESC = "Min age of store files hosted on this region server";<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  String AVG_STORE_FILE_AGE_DESC = "Average age of store files hosted on this region server";<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  String NUM_REFERENCE_FILES_DESC = "Number of reference file on this region server";<a name="line.165"></a>
+<span class="sourceLineNo">166</span>  String STOREFILE_SIZE_DESC = "Size of storefiles being served.";<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  String TOTAL_REQUEST_COUNT = "totalRequestCount";<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  String TOTAL_REQUEST_COUNT_DESC =<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      "Total number of requests this RegionServer has answered.";<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  String READ_REQUEST_COUNT = "readRequestCount";<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  String READ_REQUEST_COUNT_DESC =<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      "Number of read requests this region server has answered.";<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  String FILTERED_READ_REQUEST_COUNT = "filteredReadRequestCount";<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  String FILTERED_READ_REQUEST_COUNT_DESC =<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    "Number of filtered read requests this region server has answered.";<a name="line.175"></a>
+<span class="sourceLineNo">176</span>  String WRITE_REQUEST_COUNT = "writeRequestCount";<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  String WRITE_REQUEST_COUNT_DESC =<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      "Number of mutation requests this region server has answered.";<a name="line.178"></a>
+<span class="sourceLineNo">179</span>  String CHECK_MUTATE_FAILED_COUNT = "checkMutateFailedCount";<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  String CHECK_MUTATE_FAILED_COUNT_DESC =<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      "Number of Check and Mutate calls that failed the checks.";<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  String CHECK_MUTATE_PASSED_COUNT = "checkMutatePassedCount";<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  String CHECK_MUTATE_PASSED_COUNT_DESC =<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      "Number of Check and Mutate calls that passed the checks.";<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  String STOREFILE_INDEX_SIZE = "storeFileIndexSize";<a name="line.185"></a>
+<span class="sourceLineNo">186</span>  String STOREFILE_INDEX_SIZE_DESC = "Size of indexes in storefiles on disk.";<a name="line.186"></a>
+<span class="sourceLineNo">187</span>  String STATIC_INDEX_SIZE = "staticIndexSize";<a name="line.187"></a>
+<span class="sourceLineNo">188</span>  String STATIC_INDEX_SIZE_DESC = "Uncompressed size of the static indexes.";<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  String STATIC_BLOOM_SIZE = "staticBloomSize";<a name="line.189"></a>
+<span class="sourceLineNo">190</span>  String STATIC_BLOOM_SIZE_DESC =<a name="line.190"></a>
+<span class="sourceLineNo">191</span>      "Uncompressed size of the static bloom filters.";<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  String NUMBER_OF_MUTATIONS_WITHOUT_WAL = "mutationsWithoutWALCount";<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  String NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC =<a name="line.193"></a>
+<span class="sourceLineNo">194</span>      "Number of mutations that have been sent by clients with the write ahead logging turned off.";<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  String DATA_SIZE_WITHOUT_WAL = "mutationsWithoutWALSize";<a name="line.195"></a>
+<span class="sourceLineNo">196</span>  String DATA_SIZE_WITHOUT_WAL_DESC =<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      "Size of data that has been sent by clients with the write ahead logging turned off.";<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  String PERCENT_FILES_LOCAL = "percentFilesLocal";<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  String PERCENT_FILES_LOCAL_DESC =<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      "The percent of HFiles that are stored on the local hdfs data node.";<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  String PERCENT_FILES_LOCAL_SECONDARY_REGIONS = "percentFilesLocalSecondaryRegions";<a name="line.201"></a>
+<span class="sourceLineNo">202</span>  String PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC =<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    "The percent of HFiles used by secondary regions that are stored on the local hdfs data node.";<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  String SPLIT_QUEUE_LENGTH = "splitQueueLength";<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  String SPLIT_QUEUE_LENGTH_DESC = "Length of the queue for splits.";<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  String COMPACTION_QUEUE_LENGTH = "compactionQueueLength";<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  String LARGE_COMPACTION_QUEUE_LENGTH = "largeCompactionQueueLength";<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  String SMALL_COMPACTION_QUEUE_LENGTH = "smallCompactionQueueLength";<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  String COMPACTION_QUEUE_LENGTH_DESC = "Length of the queue for compactions.";<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  String FLUSH_QUEUE_LENGTH = "flushQueueLength";<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  String FLUSH_QUEUE_LENGTH_DESC = "Length of the queue for region flushes";<a name="line.211"></a>
+<span class="sourceLineNo">212</span>  String BLOCK_CACHE_FREE_SIZE = "blockCacheFreeSize";<a name="line.212"></a>
+<span class="sourceLineNo">213</span>  String BLOCK_CACHE_FREE_DESC =<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      "Size of the block cache that is not occupied.";<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  String BLOCK_CACHE_COUNT = "blockCacheCount";<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  String BLOCK_CACHE_COUNT_DESC = "Number of block in the block cache.";<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  String BLOCK_CACHE_SIZE = "blockCacheSize";<a name="line.217"></a>
+<span class="sourceLineNo">218</span>  String BLOCK_CACHE_SIZE_DESC = "Size of the block cache.";<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  String BLOCK_CACHE_HIT_COUNT = "blockCacheHitCount";<a name="line.219"></a>
+<span class="sourceLineNo">220</span>  String BLOCK_CACHE_HIT_COUNT_DESC = "Count of the hit on the block cache.";<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  String BLOCK_CACHE_PRIMARY_HIT_COUNT = "blockCacheHitCountPrimary";<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  String BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC = "Count of hit on primary replica in the block cache.";<a name="line.222"></a>
+<span class="sourceLineNo">223</span>  String BLOCK_CACHE_MISS_COUNT = "blockCacheMissCount";<a name="line.223"></a>
+<span class="sourceLineNo">224</span>  String BLOCK_COUNT_MISS_COUNT_DESC =<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      "Number of requests for a block that missed the block cache.";<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  String BLOCK_CACHE_PRIMARY_MISS_COUNT = "blockCacheMissCountPrimary";<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  String BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC =<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      "Number of requests for a block of primary replica that missed the block cache.";<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  String BLOCK_CACHE_EVICTION_COUNT = "blockCacheEvictionCount";<a name="line.229"></a>
+<span class="sourceLineNo">230</span>  String BLOCK_CACHE_EVICTION_COUNT_DESC =<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      "Count of the number of blocks evicted from the block cache.";<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  String BLOCK_CACHE_PRIMARY_EVICTION_COUNT = "blockCacheEvictionCountPrimary";<a name="line.232"></a>
+<span class="sourceLineNo">233</span>  String BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC =<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      "Count of the number of blocks evicted from primary replica in the block cache.";<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  String BLOCK_CACHE_HIT_PERCENT = "blockCacheCountHitPercent";<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  String BLOCK_CACHE_HIT_PERCENT_DESC =<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      "Percent of block cache requests that are hits";<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  String BLOCK_CACHE_EXPRESS_HIT_PERCENT = "blockCacheExpressHitPercent";<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  String BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC =<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      "The percent of the time that requests with the cache turned on hit the cache.";<a name="line.240"></a>
+<span class="sourceLineNo">241</span>  String BLOCK_CACHE_FAILED_INSERTION_COUNT = "blockCacheFailedInsertionCount";<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  String BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC = "Number of times that a block cache " +<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      "insertion failed. Usually due to size restrictions.";<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  String RS_START_TIME_NAME = "regionServerStartTime";<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  String ZOOKEEPER_QUORUM_NAME = "zookeeperQuorum";<a name="line.245"></a>
+<span class="sourceLineNo">246</span>  String SERVER_NAME_NAME = "serverName";<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  String CLUSTER_ID_NAME = "clusterId";<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  String RS_START_TIME_DESC = "RegionServer Start Time";<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  String ZOOKEEPER_QUORUM_DESC = "Zookeeper Quorum";<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  String SERVER_NAME_DESC = "Server Name";<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  String CLUSTER_ID_DESC = "Cluster Id";<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  String UPDATES_BLOCKED_TIME = "updatesBlockedTime";<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  String UPDATES_BLOCKED_DESC =<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      "Number of MS updates have been blocked so that the memstore can be flushed.";<a name="line.254"></a>
+<span class="sourceLineNo">255</span>  String DELETE_KEY = "delete";<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  String GET_KEY = "get";<a name="line.256"></a>
+<span class="sourceLineNo">257</span>  String INCREMENT_KEY = "increment";<a name="line.257"></a>
+<span class="sourceLineNo">258</span>  String MUTATE_KEY = "mutate";<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  String APPEND_KEY = "append";<a name="line.259"></a>
+<span class="sourceLineNo">260</span>  String REPLAY_KEY = "replay";<a name="line.260"></a>
+<span class="sourceLineNo">261</span>  String SCAN_NEXT_KEY = "scanNext";<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  String SLOW_MUTATE_KEY = "slowPutCount";<a name="line.262"></a>
+<span class="sourceLineNo">263</span>  String SLOW_GET_KEY = "slowGetCount";<a name="line.263"></a>
+<span class="sourceLineNo">264</span>  String SLOW_DELETE_KEY = "slowDeleteCount";<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  String SLOW_INCREMENT_KEY = "slowIncrementCount";<a name="line.265"></a>
+<span class="sourceLineNo">266</span>  String SLOW_APPEND_KEY = "slowAppendCount";<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  String SLOW_MUTATE_DESC =<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      "The number of Multis that took over 1000ms to complete";<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  String SLOW_DELETE_DESC =<a name="line.269"></a>
+<span class="sourceLineNo">270</span>      "The number of Deletes that took over 1000ms to complete";<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  String SLOW_GET_DESC = "The number of Gets that took over 1000ms to complete";<a name="line.271"></a>
+<span class="sourceLineNo">272</span>  String SLOW_INCREMENT_DESC =<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      "The number of Increments that took over 1000ms to complete";<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  String SLOW_APPEND_DESC =<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      "The number of Appends that took over 1000ms to complete";<a name="line.275"></a>
+<span class="sourceLineNo">276</span><a name="line.276"></a>
+<span class="sourceLineNo">277</span>  String FLUSHED_CELLS = "flushedCellsCount";<a name="line.277"></a>
+<span class="sourceLineNo">278</span>  String FLUSHED_CELLS_DESC = "The number of cells flushed to disk";<a name="line.278"></a>
+<span class="sourceLineNo">279</span>  String FLUSHED_CELLS_SIZE = "flushedCellsSize";<a name="line.279"></a>
+<span class="sourceLineNo">280</span>  String FLUSHED_CELLS_SIZE_DESC = "The total amount of data flushed to disk, in bytes";<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  String COMPACTED_CELLS = "compactedCellsCount";<a name="line.281"></a>
+<span class="sourceLineNo">282</span>  String COMPACTED_CELLS_DESC = "The number of cells processed during minor compactions";<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  String COMPACTED_CELLS_SIZE = "compactedCellsSize";<a name="line.283"></a>
+<span class="sourceLineNo">284</span>  String COMPACTED_CELLS_SIZE_DESC =<a name="line.284"></a>
+<span class="sourceLineNo">285</span>      "The total amount of data processed during minor compactions, in bytes";<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  String MAJOR_COMPACTED_CELLS = "majorCompactedCellsCount";<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  String MAJOR_COMPACTED_CELLS_DESC =<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      "The number of cells processed during major compactions";<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  String MAJOR_COMPACTED_CELLS_SIZE = "majorCompactedCellsSize";<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  String MAJOR_COMPACTED_CELLS_SIZE_DESC =<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      "The total amount of data processed during major compactions, in bytes";<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  String CELLS_COUNT_COMPACTED_TO_MOB = "cellsCountCompactedToMob";<a name="line.292"></a>
+<span class="sourceLineNo">293</span>  String CELLS_COUNT_COMPACTED_TO_MOB_DESC =<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      "The number of cells moved to mob during compaction";<a name="line.294"></a>
+<span class="sourceLineNo">295</span>  String CELLS_COUNT_COMPACTED_FROM_MOB = "cellsCountCompactedFromMob";<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  String CELLS_COUNT_COMPACTED_FROM_MOB_DESC =<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      "The number of cells moved from mob during compaction";<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  String CELLS_SIZE_COMPACTED_TO_MOB = "cellsSizeCompactedToMob";<a name="line.298"></a>
+<span class="sourceLineNo">299</span>  String CELLS_SIZE_COMPACTED_TO_MOB_DESC =<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      "The total amount of cells move to mob during compaction, in bytes";<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  String CELLS_SIZE_COMPACTED_FROM_MOB = "cellsSizeCompactedFromMob";<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  String CELLS_SIZE_COMPACTED_FROM_MOB_DESC =<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      "The total amount of cells move from mob during compaction, in bytes";<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  String MOB_FLUSH_COUNT = "mobFlushCount";<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  String MOB_FLUSH_COUNT_DESC = "The number of the flushes in mob-enabled stores";<a name="line.305"></a>
+<span class="sourceLineNo">306</span>  String MOB_FLUSHED_CELLS_COUNT = "mobFlushedCellsCount";<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  String MOB_FLUSHED_CELLS_COUNT_DESC = "The number of mob cells flushed to disk";<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  String MOB_FLUSHED_CELLS_SIZE = "mobFlushedCellsSize";<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  String MOB_FLUSHED_CELLS_SIZE_DESC = "The total amount of mob cells flushed to disk, in bytes";<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  String MOB_SCAN_CELLS_COUNT = "mobScanCellsCount";<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  String MOB_SCAN_CELLS_COUNT_DESC = "The number of scanned mob cells";<a name="line.311"></a>
+<span class="sourceLineNo">312</span>  String MOB_SCAN_CELLS_SIZE = "mobScanCellsSize";<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  String MOB_SCAN_CELLS_SIZE_DESC = "The total amount of scanned mob cells, in bytes";<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  String MOB_FILE_CACHE_ACCESS_COUNT = "mobFileCacheAccessCount";<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  String MOB_FILE_CACHE_ACCESS_COUNT_DESC = "The count of accesses to the mob file cache";<a name="line.315"></a>
+<span class="sourceLineNo">316</span>  String MOB_FILE_CACHE_MISS_COUNT = "mobFileCacheMissCount";<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  String MOB_FILE_CACHE_MISS_COUNT_DESC = "The count of misses to the mob file cache";<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  String MOB_FILE_CACHE_HIT_PERCENT = "mobFileCacheHitPercent";<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  String MOB_FILE_CACHE_HIT_PERCENT_DESC = "The hit percent to the mob file cache";<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  String MOB_FILE_CACHE_EVICTED_COUNT = "mobFileCacheEvictedCount";<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  String MOB_FILE_CACHE_EVICTED_COUNT_DESC = "The number of items evicted from the mob file cache";<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  String MOB_FILE_CACHE_COUNT = "mobFileCacheCount";<a name="line.322"></a>
+<span class="sourceLineNo">323</span>  String MOB_FILE_CACHE_COUNT_DESC = "The count of cached mob files";<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  String HEDGED_READS = "hedgedReads";<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  String HEDGED_READS_DESC = "The number of times we started a hedged read";<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  String HEDGED_READ_WINS = "hedgedReadWins";<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  String HEDGED_READ_WINS_DESC =<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      "The number of times we started a hedged read and a hedged read won";<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  String BLOCKED_REQUESTS_COUNT = "blockedRequestCount";<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  String BLOCKED_REQUESTS_COUNT_DESC = "The number of blocked requests because of memstore size is "<a name="line.332"></a>
+<span class="sourceLineNo">333</span>      + "larger than blockingMemStoreSize";<a name="line.333"></a>
+<span class="sourceLineNo">334</span><a name="line.334"></a>
+<span class="sourceLineNo">335</span>  String SPLIT_KEY = "splitTime";<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  String SPLIT_REQUEST_KEY = "splitRequestCount";<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  String SPLIT_REQUEST_DESC = "Number of splits requested";<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  String SPLIT_SUCCESS_KEY = "splitSuccessCount";<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  String SPLIT_SUCCESS_DESC = "Number of successfully executed splits";<a name="line.339"></a>
+<span class="sourceLineNo">340</span>  String FLUSH_KEY = "flushTime";<a name="line.340"></a>
+<span class="sourceLineNo">341</span><a name="line.341"></a>
+<span class="sourceLineNo">342</span>  String RPC_GET_REQUEST_COUNT = "rpcGetRequestCount";<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  String RPC_GET_REQUEST_COUNT_DESC = "Number of rpc get requests this region server has answered.";<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  String RPC_SCAN_REQUEST_COUNT = "rpcScanRequestCount";<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  String RPC_SCAN_REQUEST_COUNT_DESC =<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      "Number of rpc scan requests this region server has answered.";<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  String RPC_MULTI_REQUEST_COUNT = "rpcMultiRequestCount";<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  String RPC_MULTI_REQUEST_COUNT_DESC =<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      "Number of rpc multi requests this region server has answered.";<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  String RPC_MUTATE_REQUEST_COUNT = "rpcMutateRequestCount";<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  String RPC_MUTATE_REQUEST_COUNT_DESC =<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      "Number of rpc mutation requests this region server has answered.";<a name="line.352"></a>
+<span class="sourceLineNo">353</span>}<a name="line.353"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html
index 466ed32..6affc8f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html
@@ -203,137 +203,145 @@
 <span class="sourceLineNo">195</span>          .addGauge(Interns.info(STOREFILE_COUNT, STOREFILE_COUNT_DESC), rsWrap.getNumStoreFiles())<a name="line.195"></a>
 <span class="sourceLineNo">196</span>          .addGauge(Interns.info(MEMSTORE_SIZE, MEMSTORE_SIZE_DESC), rsWrap.getMemstoreSize())<a name="line.196"></a>
 <span class="sourceLineNo">197</span>          .addGauge(Interns.info(STOREFILE_SIZE, STOREFILE_SIZE_DESC), rsWrap.getStoreFileSize())<a name="line.197"></a>
-<span class="sourceLineNo">198</span>          .addGauge(Interns.info(RS_START_TIME_NAME, RS_START_TIME_DESC),<a name="line.198"></a>
-<span class="sourceLineNo">199</span>              rsWrap.getStartCode())<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          .addCounter(Interns.info(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC),<a name="line.200"></a>
-<span class="sourceLineNo">201</span>              rsWrap.getTotalRequestCount())<a name="line.201"></a>
-<span class="sourceLineNo">202</span>          .addCounter(Interns.info(READ_REQUEST_COUNT, READ_REQUEST_COUNT_DESC),<a name="line.202"></a>
-<span class="sourceLineNo">203</span>              rsWrap.getReadRequestsCount())<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          .addCounter(Interns.info(FILTERED_READ_REQUEST_COUNT, FILTERED_READ_REQUEST_COUNT_DESC),<a name="line.204"></a>
-<span class="sourceLineNo">205</span>              rsWrap.getFilteredReadRequestsCount())<a name="line.205"></a>
-<span class="sourceLineNo">206</span>          .addCounter(Interns.info(WRITE_REQUEST_COUNT, WRITE_REQUEST_COUNT_DESC),<a name="line.206"></a>
-<span class="sourceLineNo">207</span>              rsWrap.getWriteRequestsCount())<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          .addCounter(Interns.info(RPC_GET_REQUEST_COUNT, RPC_GET_REQUEST_COUNT_DESC),<a name="line.208"></a>
-<span class="sourceLineNo">209</span>            rsWrap.getRpcGetRequestsCount())<a name="line.209"></a>
-<span class="sourceLineNo">210</span>          .addCounter(Interns.info(RPC_SCAN_REQUEST_COUNT, RPC_SCAN_REQUEST_COUNT_DESC),<a name="line.210"></a>
-<span class="sourceLineNo">211</span>            rsWrap.getRpcScanRequestsCount())<a name="line.211"></a>
-<span class="sourceLineNo">212</span>          .addCounter(Interns.info(RPC_MULTI_REQUEST_COUNT, RPC_MULTI_REQUEST_COUNT_DESC),<a name="line.212"></a>
-<span class="sourceLineNo">213</span>            rsWrap.getRpcMultiRequestsCount())<a name="line.213"></a>
-<span class="sourceLineNo">214</span>          .addCounter(Interns.info(RPC_MUTATE_REQUEST_COUNT, RPC_MUTATE_REQUEST_COUNT_DESC),<a name="line.214"></a>
-<span class="sourceLineNo">215</span>            rsWrap.getRpcMutateRequestsCount())<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          .addCounter(Interns.info(CHECK_MUTATE_FAILED_COUNT, CHECK_MUTATE_FAILED_COUNT_DESC),<a name="line.216"></a>
-<span class="sourceLineNo">217</span>              rsWrap.getCheckAndMutateChecksFailed())<a name="line.217"></a>
-<span class="sourceLineNo">218</span>          .addCounter(Interns.info(CHECK_MUTATE_PASSED_COUNT, CHECK_MUTATE_PASSED_COUNT_DESC),<a name="line.218"></a>
-<span class="sourceLineNo">219</span>              rsWrap.getCheckAndMutateChecksPassed())<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          .addGauge(Interns.info(STOREFILE_INDEX_SIZE, STOREFILE_INDEX_SIZE_DESC),<a name="line.220"></a>
-<span class="sourceLineNo">221</span>              rsWrap.getStoreFileIndexSize())<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          .addGauge(Interns.info(STATIC_INDEX_SIZE, STATIC_INDEX_SIZE_DESC),<a name="line.222"></a>
-<span class="sourceLineNo">223</span>              rsWrap.getTotalStaticIndexSize())<a name="line.223"></a>
-<span class="sourceLineNo">224</span>          .addGauge(Interns.info(STATIC_BLOOM_SIZE, STATIC_BLOOM_SIZE_DESC),<a name="line.224"></a>
-<span class="sourceLineNo">225</span>            rsWrap.getTotalStaticBloomSize())<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          .addGauge(<a name="line.226"></a>
-<span class="sourceLineNo">227</span>            Interns.info(NUMBER_OF_MUTATIONS_WITHOUT_WAL, NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC),<a name="line.227"></a>
-<span class="sourceLineNo">228</span>              rsWrap.getNumMutationsWithoutWAL())<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          .addGauge(Interns.info(DATA_SIZE_WITHOUT_WAL, DATA_SIZE_WITHOUT_WAL_DESC),<a name="line.229"></a>
-<span class="sourceLineNo">230</span>              rsWrap.getDataInMemoryWithoutWAL())<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          .addGauge(Interns.info(PERCENT_FILES_LOCAL, PERCENT_FILES_LOCAL_DESC),<a name="line.231"></a>
-<span class="sourceLineNo">232</span>              rsWrap.getPercentFileLocal())<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          .addGauge(Interns.info(PERCENT_FILES_LOCAL_SECONDARY_REGIONS,<a name="line.233"></a>
-<span class="sourceLineNo">234</span>              PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC),<a name="line.234"></a>
-<span class="sourceLineNo">235</span>              rsWrap.getPercentFileLocalSecondaryRegions())<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          .addGauge(Interns.info(SPLIT_QUEUE_LENGTH, SPLIT_QUEUE_LENGTH_DESC),<a name="line.236"></a>
-<span class="sourceLineNo">237</span>              rsWrap.getSplitQueueSize())<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          .addGauge(Interns.info(COMPACTION_QUEUE_LENGTH, COMPACTION_QUEUE_LENGTH_DESC),<a name="line.238"></a>
-<span class="sourceLineNo">239</span>              rsWrap.getCompactionQueueSize())<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          .addGauge(Interns.info(FLUSH_QUEUE_LENGTH, FLUSH_QUEUE_LENGTH_DESC),<a name="line.240"></a>
-<span class="sourceLineNo">241</span>              rsWrap.getFlushQueueSize())<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          .addGauge(Interns.info(BLOCK_CACHE_FREE_SIZE, BLOCK_CACHE_FREE_DESC),<a name="line.242"></a>
-<span class="sourceLineNo">243</span>              rsWrap.getBlockCacheFreeSize())<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          .addGauge(Interns.info(BLOCK_CACHE_COUNT, BLOCK_CACHE_COUNT_DESC),<a name="line.244"></a>
-<span class="sourceLineNo">245</span>              rsWrap.getBlockCacheCount())<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          .addGauge(Interns.info(BLOCK_CACHE_SIZE, BLOCK_CACHE_SIZE_DESC),<a name="line.246"></a>
-<span class="sourceLineNo">247</span>              rsWrap.getBlockCacheSize())<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          .addCounter(Interns.info(BLOCK_CACHE_HIT_COUNT, BLOCK_CACHE_HIT_COUNT_DESC),<a name="line.248"></a>
-<span class="sourceLineNo">249</span>              rsWrap.getBlockCacheHitCount())<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_HIT_COUNT,<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC), rsWrap.getBlockCachePrimaryHitCount())<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          .addCounter(Interns.info(BLOCK_CACHE_MISS_COUNT, BLOCK_COUNT_MISS_COUNT_DESC),<a name="line.252"></a>
-<span class="sourceLineNo">253</span>              rsWrap.getBlockCacheMissCount())<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_MISS_COUNT,<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC), rsWrap.getBlockCachePrimaryMissCount())<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          .addCounter(Interns.info(BLOCK_CACHE_EVICTION_COUNT, BLOCK_CACHE_EVICTION_COUNT_DESC),<a name="line.256"></a>
-<span class="sourceLineNo">257</span>              rsWrap.getBlockCacheEvictedCount())<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_EVICTION_COUNT,<a name="line.258"></a>
-<span class="sourceLineNo">259</span>            BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC), rsWrap.getBlockCachePrimaryEvictedCount())<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          .addGauge(Interns.info(BLOCK_CACHE_HIT_PERCENT, BLOCK_CACHE_HIT_PERCENT_DESC),<a name="line.260"></a>
-<span class="sourceLineNo">261</span>              rsWrap.getBlockCacheHitPercent())<a name="line.261"></a>
-<span class="sourceLineNo">262</span>          .addGauge(Interns.info(BLOCK_CACHE_EXPRESS_HIT_PERCENT,<a name="line.262"></a>
-<span class="sourceLineNo">263</span>              BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC), rsWrap.getBlockCacheHitCachingPercent())<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          .addCounter(Interns.info(BLOCK_CACHE_FAILED_INSERTION_COUNT,<a name="line.264"></a>
-<span class="sourceLineNo">265</span>              BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC),rsWrap.getBlockCacheFailedInsertions())<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          .addCounter(Interns.info(UPDATES_BLOCKED_TIME, UPDATES_BLOCKED_DESC),<a name="line.266"></a>
-<span class="sourceLineNo">267</span>              rsWrap.getUpdatesBlockedTime())<a name="line.267"></a>
-<span class="sourceLineNo">268</span>          .addCounter(Interns.info(FLUSHED_CELLS, FLUSHED_CELLS_DESC),<a name="line.268"></a>
-<span class="sourceLineNo">269</span>              rsWrap.getFlushedCellsCount())<a name="line.269"></a>
-<span class="sourceLineNo">270</span>          .addCounter(Interns.info(COMPACTED_CELLS, COMPACTED_CELLS_DESC),<a name="line.270"></a>
-<span class="sourceLineNo">271</span>              rsWrap.getCompactedCellsCount())<a name="line.271"></a>
-<span class="sourceLineNo">272</span>          .addCounter(Interns.info(MAJOR_COMPACTED_CELLS, MAJOR_COMPACTED_CELLS_DESC),<a name="line.272"></a>
-<span class="sourceLineNo">273</span>              rsWrap.getMajorCompactedCellsCount())<a name="line.273"></a>
-<span class="sourceLineNo">274</span>          .addCounter(Interns.info(FLUSHED_CELLS_SIZE, FLUSHED_CELLS_SIZE_DESC),<a name="line.274"></a>
-<span class="sourceLineNo">275</span>              rsWrap.getFlushedCellsSize())<a name="line.275"></a>
-<span class="sourceLineNo">276</span>          .addCounter(Interns.info(COMPACTED_CELLS_SIZE, COMPACTED_CELLS_SIZE_DESC),<a name="line.276"></a>
-<span class="sourceLineNo">277</span>              rsWrap.getCompactedCellsSize())<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          .addCounter(Interns.info(MAJOR_COMPACTED_CELLS_SIZE, MAJOR_COMPACTED_CELLS_SIZE_DESC),<a name="line.278"></a>
-<span class="sourceLineNo">279</span>              rsWrap.getMajorCompactedCellsSize())<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>          .addCounter(<a name="line.281"></a>
-<span class="sourceLineNo">282</span>              Interns.info(CELLS_COUNT_COMPACTED_FROM_MOB, CELLS_COUNT_COMPACTED_FROM_MOB_DESC),<a name="line.282"></a>
-<span class="sourceLineNo">283</span>              rsWrap.getCellsCountCompactedFromMob())<a name="line.283"></a>
-<span class="sourceLineNo">284</span>          .addCounter(Interns.info(CELLS_COUNT_COMPACTED_TO_MOB, CELLS_COUNT_COMPACTED_TO_MOB_DESC),<a name="line.284"></a>
-<span class="sourceLineNo">285</span>              rsWrap.getCellsCountCompactedToMob())<a name="line.285"></a>
-<span class="sourceLineNo">286</span>          .addCounter(<a name="line.286"></a>
-<span class="sourceLineNo">287</span>              Interns.info(CELLS_SIZE_COMPACTED_FROM_MOB, CELLS_SIZE_COMPACTED_FROM_MOB_DESC),<a name="line.287"></a>
-<span class="sourceLineNo">288</span>              rsWrap.getCellsSizeCompactedFromMob())<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          .addCounter(Interns.info(CELLS_SIZE_COMPACTED_TO_MOB, CELLS_SIZE_COMPACTED_TO_MOB_DESC),<a name="line.289"></a>
-<span class="sourceLineNo">290</span>              rsWrap.getCellsSizeCompactedToMob())<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          .addCounter(Interns.info(MOB_FLUSH_COUNT, MOB_FLUSH_COUNT_DESC),<a name="line.291"></a>
-<span class="sourceLineNo">292</span>              rsWrap.getMobFlushCount())<a name="line.292"></a>
-<span class="sourceLineNo">293</span>          .addCounter(Interns.info(MOB_FLUSHED_CELLS_COUNT, MOB_FLUSHED_CELLS_COUNT_DESC),<a name="line.293"></a>
-<span class="sourceLineNo">294</span>              rsWrap.getMobFlushedCellsCount())<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          .addCounter(Interns.info(MOB_FLUSHED_CELLS_SIZE, MOB_FLUSHED_CELLS_SIZE_DESC),<a name="line.295"></a>
-<span class="sourceLineNo">296</span>              rsWrap.getMobFlushedCellsSize())<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          .addCounter(Interns.info(MOB_SCAN_CELLS_COUNT, MOB_SCAN_CELLS_COUNT_DESC),<a name="line.297"></a>
-<span class="sourceLineNo">298</span>              rsWrap.getMobScanCellsCount())<a name="line.298"></a>
-<span class="sourceLineNo">299</span>          .addCounter(Interns.info(MOB_SCAN_CELLS_SIZE, MOB_SCAN_CELLS_SIZE_DESC),<a name="line.299"></a>
-<span class="sourceLineNo">300</span>              rsWrap.getMobScanCellsSize())<a name="line.300"></a>
-<span class="sourceLineNo">301</span>          .addGauge(Interns.info(MOB_FILE_CACHE_COUNT, MOB_FILE_CACHE_COUNT_DESC),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              rsWrap.getMobFileCacheCount())<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          .addCounter(Interns.info(MOB_FILE_CACHE_ACCESS_COUNT, MOB_FILE_CACHE_ACCESS_COUNT_DESC),<a name="line.303"></a>
-<span class="sourceLineNo">304</span>              rsWrap.getMobFileCacheAccessCount())<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          .addCounter(Interns.info(MOB_FILE_CACHE_MISS_COUNT, MOB_FILE_CACHE_MISS_COUNT_DESC),<a name="line.305"></a>
-<span class="sourceLineNo">306</span>              rsWrap.getMobFileCacheMissCount())<a name="line.306"></a>
-<span class="sourceLineNo">307</span>          .addCounter(<a name="line.307"></a>
-<span class="sourceLineNo">308</span>              Interns.info(MOB_FILE_CACHE_EVICTED_COUNT, MOB_FILE_CACHE_EVICTED_COUNT_DESC),<a name="line.308"></a>
-<span class="sourceLineNo">309</span>              rsWrap.getMobFileCacheEvictedCount())<a name="line.309"></a>
-<span class="sourceLineNo">310</span>          .addGauge(Interns.info(MOB_FILE_CACHE_HIT_PERCENT, MOB_FILE_CACHE_HIT_PERCENT_DESC),<a name="line.310"></a>
-<span class="sourceLineNo">311</span>              rsWrap.getMobFileCacheHitPercent())<a name="line.311"></a>
-<span class="sourceLineNo">312</span><a name="line.312"></a>
-<span class="sourceLineNo">313</span>          .addCounter(Interns.info(HEDGED_READS, HEDGED_READS_DESC), rsWrap.getHedgedReadOps())<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          .addCounter(Interns.info(HEDGED_READ_WINS, HEDGED_READ_WINS_DESC),<a name="line.314"></a>
-<span class="sourceLineNo">315</span>              rsWrap.getHedgedReadWins())<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>          .addCounter(Interns.info(BLOCKED_REQUESTS_COUNT, BLOCKED_REQUESTS_COUNT_DESC),<a name="line.317"></a>
-<span class="sourceLineNo">318</span>            rsWrap.getBlockedRequestsCount())<a name="line.318"></a>
-<span class="sourceLineNo">319</span><a name="line.319"></a>
-<span class="sourceLineNo">320</span>          .tag(Interns.info(ZOOKEEPER_QUORUM_NAME, ZOOKEEPER_QUORUM_DESC),<a name="line.320"></a>
-<span class="sourceLineNo">321</span>              rsWrap.getZookeeperQuorum())<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          .tag(Interns.info(SERVER_NAME_NAME, SERVER_NAME_DESC), rsWrap.getServerName())<a name="line.322"></a>
-<span class="sourceLineNo">323</span>          .tag(Interns.info(CLUSTER_ID_NAME, CLUSTER_ID_DESC), rsWrap.getClusterId());<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>    metricsRegistry.snapshot(mrb, all);<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">198</span>          .addGauge(Interns.info(MAX_STORE_FILE_AGE, MAX_STORE_FILE_AGE_DESC),<a name="line.198"></a>
+<span class="sourceLineNo">199</span>              rsWrap.getMaxStoreFileAge())<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          .addGauge(Interns.info(MIN_STORE_FILE_AGE, MIN_STORE_FILE_AGE_DESC),<a name="line.200"></a>
+<span class="sourceLineNo">201</span>              rsWrap.getMinStoreFileAge())<a name="line.201"></a>
+<span class="sourceLineNo">202</span>          .addGauge(Interns.info(AVG_STORE_FILE_AGE, AVG_STORE_FILE_AGE_DESC),<a name="line.202"></a>
+<span class="sourceLineNo">203</span>              rsWrap.getAvgStoreFileAge())<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          .addGauge(Interns.info(NUM_REFERENCE_FILES, NUM_REFERENCE_FILES_DESC),<a name="line.204"></a>
+<span class="sourceLineNo">205</span>              rsWrap.getNumReferenceFiles())<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          .addGauge(Interns.info(RS_START_TIME_NAME, RS_START_TIME_DESC),<a name="line.206"></a>
+<span class="sourceLineNo">207</span>              rsWrap.getStartCode())<a name="line.207"></a>
+<span class="sourceLineNo">208</span>          .addCounter(Interns.info(TOTAL_REQUEST_COUNT, TOTAL_REQUEST_COUNT_DESC),<a name="line.208"></a>
+<span class="sourceLineNo">209</span>              rsWrap.getTotalRequestCount())<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          .addCounter(Interns.info(READ_REQUEST_COUNT, READ_REQUEST_COUNT_DESC),<a name="line.210"></a>
+<span class="sourceLineNo">211</span>              rsWrap.getReadRequestsCount())<a name="line.211"></a>
+<span class="sourceLineNo">212</span>          .addCounter(Interns.info(FILTERED_READ_REQUEST_COUNT, FILTERED_READ_REQUEST_COUNT_DESC),<a name="line.212"></a>
+<span class="sourceLineNo">213</span>              rsWrap.getFilteredReadRequestsCount())<a name="line.213"></a>
+<span class="sourceLineNo">214</span>          .addCounter(Interns.info(WRITE_REQUEST_COUNT, WRITE_REQUEST_COUNT_DESC),<a name="line.214"></a>
+<span class="sourceLineNo">215</span>              rsWrap.getWriteRequestsCount())<a name="line.215"></a>
+<span class="sourceLineNo">216</span>          .addCounter(Interns.info(RPC_GET_REQUEST_COUNT, RPC_GET_REQUEST_COUNT_DESC),<a name="line.216"></a>
+<span class="sourceLineNo">217</span>            rsWrap.getRpcGetRequestsCount())<a name="line.217"></a>
+<span class="sourceLineNo">218</span>          .addCounter(Interns.info(RPC_SCAN_REQUEST_COUNT, RPC_SCAN_REQUEST_COUNT_DESC),<a name="line.218"></a>
+<span class="sourceLineNo">219</span>            rsWrap.getRpcScanRequestsCount())<a name="line.219"></a>
+<span class="sourceLineNo">220</span>          .addCounter(Interns.info(RPC_MULTI_REQUEST_COUNT, RPC_MULTI_REQUEST_COUNT_DESC),<a name="line.220"></a>
+<span class="sourceLineNo">221</span>            rsWrap.getRpcMultiRequestsCount())<a name="line.221"></a>
+<span class="sourceLineNo">222</span>          .addCounter(Interns.info(RPC_MUTATE_REQUEST_COUNT, RPC_MUTATE_REQUEST_COUNT_DESC),<a name="line.222"></a>
+<span class="sourceLineNo">223</span>            rsWrap.getRpcMutateRequestsCount())<a name="line.223"></a>
+<span class="sourceLineNo">224</span>          .addCounter(Interns.info(CHECK_MUTATE_FAILED_COUNT, CHECK_MUTATE_FAILED_COUNT_DESC),<a name="line.224"></a>
+<span class="sourceLineNo">225</span>              rsWrap.getCheckAndMutateChecksFailed())<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          .addCounter(Interns.info(CHECK_MUTATE_PASSED_COUNT, CHECK_MUTATE_PASSED_COUNT_DESC),<a name="line.226"></a>
+<span class="sourceLineNo">227</span>              rsWrap.getCheckAndMutateChecksPassed())<a name="line.227"></a>
+<span class="sourceLineNo">228</span>          .addGauge(Interns.info(STOREFILE_INDEX_SIZE, STOREFILE_INDEX_SIZE_DESC),<a name="line.228"></a>
+<span class="sourceLineNo">229</span>              rsWrap.getStoreFileIndexSize())<a name="line.229"></a>
+<span class="sourceLineNo">230</span>          .addGauge(Interns.info(STATIC_INDEX_SIZE, STATIC_INDEX_SIZE_DESC),<a name="line.230"></a>
+<span class="sourceLineNo">231</span>              rsWrap.getTotalStaticIndexSize())<a name="line.231"></a>
+<span class="sourceLineNo">232</span>          .addGauge(Interns.info(STATIC_BLOOM_SIZE, STATIC_BLOOM_SIZE_DESC),<a name="line.232"></a>
+<span class="sourceLineNo">233</span>            rsWrap.getTotalStaticBloomSize())<a name="line.233"></a>
+<span class="sourceLineNo">234</span>          .addGauge(<a name="line.234"></a>
+<span class="sourceLineNo">235</span>            Interns.info(NUMBER_OF_MUTATIONS_WITHOUT_WAL, NUMBER_OF_MUTATIONS_WITHOUT_WAL_DESC),<a name="line.235"></a>
+<span class="sourceLineNo">236</span>              rsWrap.getNumMutationsWithoutWAL())<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          .addGauge(Interns.info(DATA_SIZE_WITHOUT_WAL, DATA_SIZE_WITHOUT_WAL_DESC),<a name="line.237"></a>
+<span class="sourceLineNo">238</span>              rsWrap.getDataInMemoryWithoutWAL())<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          .addGauge(Interns.info(PERCENT_FILES_LOCAL, PERCENT_FILES_LOCAL_DESC),<a name="line.239"></a>
+<span class="sourceLineNo">240</span>              rsWrap.getPercentFileLocal())<a name="line.240"></a>
+<span class="sourceLineNo">241</span>          .addGauge(Interns.info(PERCENT_FILES_LOCAL_SECONDARY_REGIONS,<a name="line.241"></a>
+<span class="sourceLineNo">242</span>              PERCENT_FILES_LOCAL_SECONDARY_REGIONS_DESC),<a name="line.242"></a>
+<span class="sourceLineNo">243</span>              rsWrap.getPercentFileLocalSecondaryRegions())<a name="line.243"></a>
+<span class="sourceLineNo">244</span>          .addGauge(Interns.info(SPLIT_QUEUE_LENGTH, SPLIT_QUEUE_LENGTH_DESC),<a name="line.244"></a>
+<span class="sourceLineNo">245</span>              rsWrap.getSplitQueueSize())<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          .addGauge(Interns.info(COMPACTION_QUEUE_LENGTH, COMPACTION_QUEUE_LENGTH_DESC),<a name="line.246"></a>
+<span class="sourceLineNo">247</span>              rsWrap.getCompactionQueueSize())<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          .addGauge(Interns.info(FLUSH_QUEUE_LENGTH, FLUSH_QUEUE_LENGTH_DESC),<a name="line.248"></a>
+<span class="sourceLineNo">249</span>              rsWrap.getFlushQueueSize())<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          .addGauge(Interns.info(BLOCK_CACHE_FREE_SIZE, BLOCK_CACHE_FREE_DESC),<a name="line.250"></a>
+<span class="sourceLineNo">251</span>              rsWrap.getBlockCacheFreeSize())<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          .addGauge(Interns.info(BLOCK_CACHE_COUNT, BLOCK_CACHE_COUNT_DESC),<a name="line.252"></a>
+<span class="sourceLineNo">253</span>              rsWrap.getBlockCacheCount())<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          .addGauge(Interns.info(BLOCK_CACHE_SIZE, BLOCK_CACHE_SIZE_DESC),<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              rsWrap.getBlockCacheSize())<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          .addCounter(Interns.info(BLOCK_CACHE_HIT_COUNT, BLOCK_CACHE_HIT_COUNT_DESC),<a name="line.256"></a>
+<span class="sourceLineNo">257</span>              rsWrap.getBlockCacheHitCount())<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_HIT_COUNT,<a name="line.258"></a>
+<span class="sourceLineNo">259</span>            BLOCK_CACHE_PRIMARY_HIT_COUNT_DESC), rsWrap.getBlockCachePrimaryHitCount())<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          .addCounter(Interns.info(BLOCK_CACHE_MISS_COUNT, BLOCK_COUNT_MISS_COUNT_DESC),<a name="line.260"></a>
+<span class="sourceLineNo">261</span>              rsWrap.getBlockCacheMissCount())<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_MISS_COUNT,<a name="line.262"></a>
+<span class="sourceLineNo">263</span>            BLOCK_COUNT_PRIMARY_MISS_COUNT_DESC), rsWrap.getBlockCachePrimaryMissCount())<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          .addCounter(Interns.info(BLOCK_CACHE_EVICTION_COUNT, BLOCK_CACHE_EVICTION_COUNT_DESC),<a name="line.264"></a>
+<span class="sourceLineNo">265</span>              rsWrap.getBlockCacheEvictedCount())<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          .addCounter(Interns.info(BLOCK_CACHE_PRIMARY_EVICTION_COUNT,<a name="line.266"></a>
+<span class="sourceLineNo">267</span>            BLOCK_CACHE_PRIMARY_EVICTION_COUNT_DESC), rsWrap.getBlockCachePrimaryEvictedCount())<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          .addGauge(Interns.info(BLOCK_CACHE_HIT_PERCENT, BLOCK_CACHE_HIT_PERCENT_DESC),<a name="line.268"></a>
+<span class="sourceLineNo">269</span>              rsWrap.getBlockCacheHitPercent())<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          .addGauge(Interns.info(BLOCK_CACHE_EXPRESS_HIT_PERCENT,<a name="line.270"></a>
+<span class="sourceLineNo">271</span>              BLOCK_CACHE_EXPRESS_HIT_PERCENT_DESC), rsWrap.getBlockCacheHitCachingPercent())<a name="line.271"></a>
+<span class="sourceLineNo">272</span>          .addCounter(Interns.info(BLOCK_CACHE_FAILED_INSERTION_COUNT,<a name="line.272"></a>
+<span class="sourceLineNo">273</span>              BLOCK_CACHE_FAILED_INSERTION_COUNT_DESC),rsWrap.getBlockCacheFailedInsertions())<a name="line.273"></a>
+<span class="sourceLineNo">274</span>          .addCounter(Interns.info(UPDATES_BLOCKED_TIME, UPDATES_BLOCKED_DESC),<a name="line.274"></a>
+<span class="sourceLineNo">275</span>              rsWrap.getUpdatesBlockedTime())<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          .addCounter(Interns.info(FLUSHED_CELLS, FLUSHED_CELLS_DESC),<a name="line.276"></a>
+<span class="sourceLineNo">277</span>              rsWrap.getFlushedCellsCount())<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          .addCounter(Interns.info(COMPACTED_CELLS, COMPACTED_CELLS_DESC),<a name="line.278"></a>
+<span class="sourceLineNo">279</span>              rsWrap.getCompactedCellsCount())<a name="line.279"></a>
+<span class="sourceLineNo">280</span>          .addCounter(Interns.info(MAJOR_COMPACTED_CELLS, MAJOR_COMPACTED_CELLS_DESC),<a name="line.280"></a>
+<span class="sourceLineNo">281</span>              rsWrap.getMajorCompactedCellsCount())<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          .addCounter(Interns.info(FLUSHED_CELLS_SIZE, FLUSHED_CELLS_SIZE_DESC),<a name="line.282"></a>
+<span class="sourceLineNo">283</span>              rsWrap.getFlushedCellsSize())<a name="line.283"></a>
+<span class="sourceLineNo">284</span>          .addCounter(Interns.info(COMPACTED_CELLS_SIZE, COMPACTED_CELLS_SIZE_DESC),<a name="line.284"></a>
+<span class="sourceLineNo">285</span>              rsWrap.getCompactedCellsSize())<a name="line.285"></a>
+<span class="sourceLineNo">286</span>          .addCounter(Interns.info(MAJOR_COMPACTED_CELLS_SIZE, MAJOR_COMPACTED_CELLS_SIZE_DESC),<a name="line.286"></a>
+<span class="sourceLineNo">287</span>              rsWrap.getMajorCompactedCellsSize())<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>          .addCounter(<a name="line.289"></a>
+<span class="sourceLineNo">290</span>              Interns.info(CELLS_COUNT_COMPACTED_FROM_MOB, CELLS_COUNT_COMPACTED_FROM_MOB_DESC),<a name="line.290"></a>
+<span class="sourceLineNo">291</span>              rsWrap.getCellsCountCompactedFromMob())<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          .addCounter(Interns.info(CELLS_COUNT_COMPACTED_TO_MOB, CELLS_COUNT_COMPACTED_TO_MOB_DESC),<a name="line.292"></a>
+<span class="sourceLineNo">293</span>              rsWrap.getCellsCountCompactedToMob())<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          .addCounter(<a name="line.294"></a>
+<span class="sourceLineNo">295</span>              Interns.info(CELLS_SIZE_COMPACTED_FROM_MOB, CELLS_SIZE_COMPACTED_FROM_MOB_DESC),<a name="line.295"></a>
+<span class="sourceLineNo">296</span>              rsWrap.getCellsSizeCompactedFromMob())<a name="line.296"></a>
+<span class="sourceLineNo">297</span>          .addCounter(Interns.info(CELLS_SIZE_COMPACTED_TO_MOB, CELLS_SIZE_COMPACTED_TO_MOB_DESC),<a name="line.297"></a>
+<span class="sourceLineNo">298</span>              rsWrap.getCellsSizeCompactedToMob())<a name="line.298"></a>
+<span class="sourceLineNo">299</span>          .addCounter(Interns.info(MOB_FLUSH_COUNT, MOB_FLUSH_COUNT_DESC),<a name="line.299"></a>
+<span class="sourceLineNo">300</span>              rsWrap.getMobFlushCount())<a name="line.300"></a>
+<span class="sourceLineNo">301</span>          .addCounter(Interns.info(MOB_FLUSHED_CELLS_COUNT, MOB_FLUSHED_CELLS_COUNT_DESC),<a name="line.301"></a>
+<span class="sourceLineNo">302</span>              rsWrap.getMobFlushedCellsCount())<a name="line.302"></a>
+<span class="sourceLineNo">303</span>          .addCounter(Interns.info(MOB_FLUSHED_CELLS_SIZE, MOB_FLUSHED_CELLS_SIZE_DESC),<a name="line.303"></a>
+<span class="sourceLineNo">304</span>              rsWrap.getMobFlushedCellsSize())<a name="line.304"></a>
+<span class="sourceLineNo">305</span>          .addCounter(Interns.info(MOB_SCAN_CELLS_COUNT, MOB_SCAN_CELLS_COUNT_DESC),<a name="line.305"></a>
+<span class="sourceLineNo">306</span>              rsWrap.getMobScanCellsCount())<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          .addCounter(Interns.info(MOB_SCAN_CELLS_SIZE, MOB_SCAN_CELLS_SIZE_DESC),<a name="line.307"></a>
+<span class="sourceLineNo">308</span>              rsWrap.getMobScanCellsSize())<a name="line.308"></a>
+<span class="sourceLineNo">309</span>          .addGauge(Interns.info(MOB_FILE_CACHE_COUNT, MOB_FILE_CACHE_COUNT_DESC),<a name="line.309"></a>
+<span class="sourceLineNo">310</span>              rsWrap.getMobFileCacheCount())<a name="line.310"></a>
+<span class="sourceLineNo">311</span>          .addCounter(Interns.info(MOB_FILE_CACHE_ACCESS_COUNT, MOB_FILE_CACHE_ACCESS_COUNT_DESC),<a name="line.311"></a>
+<span class="sourceLineNo">312</span>              rsWrap.getMobFileCacheAccessCount())<a name="line.312"></a>
+<span class="sourceLineNo">313</span>          .addCounter(Interns.info(MOB_FILE_CACHE_MISS_COUNT, MOB_FILE_CACHE_MISS_COUNT_DESC),<a name="line.313"></a>
+<span class="sourceLineNo">314</span>              rsWrap.getMobFileCacheMissCount())<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          .addCounter(<a name="line.315"></a>
+<span class="sourceLineNo">316</span>              Interns.info(MOB_FILE_CACHE_EVICTED_COUNT, MOB_FILE_CACHE_EVICTED_COUNT_DESC),<a name="line.316"></a>
+<span class="sourceLineNo">317</span>              rsWrap.getMobFileCacheEvictedCount())<a name="line.317"></a>
+<span class="sourceLineNo">318</span>          .addGauge(Interns.info(MOB_FILE_CACHE_HIT_PERCENT, MOB_FILE_CACHE_HIT_PERCENT_DESC),<a name="line.318"></a>
+<span class="sourceLineNo">319</span>              rsWrap.getMobFileCacheHitPercent())<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>          .addCounter(Interns.info(HEDGED_READS, HEDGED_READS_DESC), rsWrap.getHedgedReadOps())<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          .addCounter(Interns.info(HEDGED_READ_WINS, HEDGED_READ_WINS_DESC),<a name="line.322"></a>
+<span class="sourceLineNo">323</span>              rsWrap.getHedgedReadWins())<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          .addCounter(Interns.info(BLOCKED_REQUESTS_COUNT, BLOCKED_REQUESTS_COUNT_DESC),<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            rsWrap.getBlockedRequestsCount())<a name="line.326"></a>
+<span class="sourceLineNo">327</span><a name="line.327"></a>
+<span class="sourceLineNo">328</span>          .tag(Interns.info(ZOOKEEPER_QUORUM_NAME, ZOOKEEPER_QUORUM_DESC),<a name="line.328"></a>
+<span class="sourceLineNo">329</span>              rsWrap.getZookeeperQuorum())<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          .tag(Interns.info(SERVER_NAME_NAME, SERVER_NAME_DESC), rsWrap.getServerName())<a name="line.330"></a>
+<span class="sourceLineNo">331</span>          .tag(Interns.info(CLUSTER_ID_NAME, CLUSTER_ID_DESC), rsWrap.getClusterId());<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
+<span class="sourceLineNo">333</span><a name="line.333"></a>
+<span class="sourceLineNo">334</span>    metricsRegistry.snapshot(mrb, all);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
+<span class="sourceLineNo">336</span>}<a name="line.336"></a>
 
 
 


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
index 4504336..bda4d11 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
@@ -1896,495 +1896,578 @@
 <span class="sourceLineNo">1888</span>  }<a name="line.1888"></a>
 <span class="sourceLineNo">1889</span><a name="line.1889"></a>
 <span class="sourceLineNo">1890</span>  @Override<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>  public long getStoreSizeUncompressed() {<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>    return this.totalUncompressedBytes;<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>  }<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span><a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>  @Override<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>  public long getStorefilesSize() {<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    long size = 0;<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      StoreFile.Reader r = s.getReader();<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      if (r == null) {<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>        continue;<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      }<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      size += r.length();<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>    }<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>    return size;<a name="line.1906"></a>
+<span class="sourceLineNo">1891</span>  public long getMaxStoreFileAge() {<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>    long earliestTS = Long.MAX_VALUE;<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>      StoreFile.Reader r = s.getReader();<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>      if (r == null) {<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>        continue;<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>      }<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>      if (!s.isHFile()) {<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span>        continue;<a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>      }<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>      long createdTS = s.getFileInfo().getCreatedTimestamp();<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>      earliestTS = (createdTS &lt; earliestTS) ? createdTS : earliestTS;<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>    }<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>    return now - earliestTS;<a name="line.1906"></a>
 <span class="sourceLineNo">1907</span>  }<a name="line.1907"></a>
 <span class="sourceLineNo">1908</span><a name="line.1908"></a>
 <span class="sourceLineNo">1909</span>  @Override<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>  public long getStorefilesIndexSize() {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    long size = 0;<a name="line.1911"></a>
+<span class="sourceLineNo">1910</span>  public long getMinStoreFileAge() {<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>    long latestTS = 0;<a name="line.1911"></a>
 <span class="sourceLineNo">1912</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1912"></a>
 <span class="sourceLineNo">1913</span>      StoreFile.Reader r = s.getReader();<a name="line.1913"></a>
 <span class="sourceLineNo">1914</span>      if (r == null) {<a name="line.1914"></a>
 <span class="sourceLineNo">1915</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1915"></a>
 <span class="sourceLineNo">1916</span>        continue;<a name="line.1916"></a>
 <span class="sourceLineNo">1917</span>      }<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>      size += r.indexSize();<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    }<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>    return size;<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>  }<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span><a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>  @Override<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>  public long getTotalStaticIndexSize() {<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>    long size = 0;<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>      StoreFile.Reader r = s.getReader();<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      if (r == null) {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        continue;<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      size += r.getUncompressedDataIndexSize();<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>    }<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>    return size;<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>  }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span><a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  @Override<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>  public long getTotalStaticBloomSize() {<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>    long size = 0;<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>      StoreFile.Reader r = s.getReader();<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>      if (r == null) {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>        continue;<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>      }<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>      size += r.getTotalBloomSize();<a name="line.1944"></a>
+<span class="sourceLineNo">1918</span>      if (!s.isHFile()) {<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>        continue;<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>      }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      long createdTS = s.getFileInfo().getCreatedTimestamp();<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      latestTS = (createdTS &gt; latestTS) ? createdTS : latestTS;<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>    }<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>    return now - latestTS;<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>  }<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span><a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>  @Override<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>  public long getAvgStoreFileAge() {<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    long sum = 0, count = 0;<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>      StoreFile.Reader r = s.getReader();<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>      if (r == null) {<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>        continue;<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>      }<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>      if (!s.isHFile()) {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>        continue;<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>      }<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      sum += s.getFileInfo().getCreatedTimestamp();<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>      count++;<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>    }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>    if (count == 0) {<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>      return 0;<a name="line.1944"></a>
 <span class="sourceLineNo">1945</span>    }<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>    return size;<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>  }<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span><a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>  @Override<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>  public long getMemStoreSize() {<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>    return this.memstore.size();<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>  }<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span><a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>  @Override<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>  public int getCompactPriority() {<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>    int priority = this.storeEngine.getStoreFileManager().getStoreCompactionPriority();<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>    if (priority == PRIORITY_USER) {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>      LOG.warn("Compaction priority is USER despite there being no user compaction");<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    }<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    return priority;<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>  }<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span><a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>  @Override<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>  public boolean throttleCompaction(long compactionSize) {<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    return storeEngine.getCompactionPolicy().throttleCompaction(compactionSize);<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>  }<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span><a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  public HRegion getHRegion() {<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>    return this.region;<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>  }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span><a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>  @Override<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>  public RegionCoprocessorHost getCoprocessorHost() {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>    return this.region.getCoprocessorHost();<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>  }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span><a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>  @Override<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>  public HRegionInfo getRegionInfo() {<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    return this.fs.getRegionInfo();<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  @Override<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  public boolean areWritesEnabled() {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    return this.region.areWritesEnabled();<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>  }<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span><a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>  @Override<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>  public long getSmallestReadPoint() {<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>    return this.region.getSmallestReadPoint();<a name="line.1989"></a>
+<span class="sourceLineNo">1946</span>    long avgTS = sum / count;<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>    return now - avgTS;<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  }<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span><a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>  @Override<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public long getNumReferenceFiles() {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    long numRefFiles = 0;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>      if (s.isReference()) {<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        numRefFiles++;<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>      }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>    }<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>    return numRefFiles;<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>  }<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span><a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>  @Override<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>  public long getNumHFiles() {<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>    long numHFiles = 0;<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>      if (s.isHFile()) {<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>        numHFiles++;<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>      }<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>    }<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>    return numHFiles;<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>  }<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span><a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>  @Override<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>  public long getStoreSizeUncompressed() {<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>    return this.totalUncompressedBytes;<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>  }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span><a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  @Override<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>  public long getStorefilesSize() {<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>    long size = 0;<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>      StoreFile.Reader r = s.getReader();<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>      if (r == null) {<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        continue;<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      }<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>      size += r.length();<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    }<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>    return size;<a name="line.1989"></a>
 <span class="sourceLineNo">1990</span>  }<a name="line.1990"></a>
 <span class="sourceLineNo">1991</span><a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>  /**<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>   * Updates the value for the given row/family/qualifier. This function will always be seen as<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>   * atomic by other readers because it only puts a single KV to memstore. Thus no read/write<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>   * control necessary.<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>   * @param row row to update<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>   * @param f family to update<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>   * @param qualifier qualifier to update<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>   * @param newValue the new value to set into memstore<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>   * @return memstore size delta<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>   * @throws IOException<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>   */<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>  @VisibleForTesting<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>  public long updateColumnValue(byte [] row, byte [] f,<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>                                byte [] qualifier, long newValue)<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      throws IOException {<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span><a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    this.lock.readLock().lock();<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    try {<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span><a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>      return this.memstore.updateColumnValue(row,<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>          f,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          qualifier,<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          newValue,<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>          now);<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span><a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>    } finally {<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>      this.lock.readLock().unlock();<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>    }<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>  }<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span><a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>  @Override<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>  public long upsert(Iterable&lt;Cell&gt; cells, long readpoint) throws IOException {<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>    this.lock.readLock().lock();<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    try {<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>      return this.memstore.upsert(cells, readpoint);<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>    } finally {<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      this.lock.readLock().unlock();<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>  }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span><a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>  @Override<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>  public StoreFlushContext createFlushContext(long cacheFlushId) {<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>    return new StoreFlusherImpl(cacheFlushId);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>  }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span><a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>  private final class StoreFlusherImpl implements StoreFlushContext {<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span><a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    private long cacheFlushSeqNum;<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    private MemStoreSnapshot snapshot;<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    private List&lt;Path&gt; tempFiles;<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    private List&lt;Path&gt; committedFiles;<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    private long cacheFlushCount;<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private long cacheFlushSize;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span><a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>    private StoreFlusherImpl(long cacheFlushSeqNum) {<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>      this.cacheFlushSeqNum = cacheFlushSeqNum;<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">1992</span>  @Override<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>  public long getStorefilesIndexSize() {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    long size = 0;<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>    for (StoreFile s: this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>      StoreFile.Reader r = s.getReader();<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>      if (r == null) {<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        LOG.warn("StoreFile " + s + " has a null Reader");<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>        continue;<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>      }<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>      size += r.indexSize();<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    }<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>    return size;<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>  }<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span><a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>  @Override<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>  public long getTotalStaticIndexSize() {<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    long size = 0;<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>      StoreFile.Reader r = s.getReader();<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>      if (r == null) {<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        continue;<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>      }<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>      size += r.getUncompressedDataIndexSize();<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>    }<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>    return size;<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>  }<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span><a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>  @Override<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>  public long getTotalStaticBloomSize() {<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>    long size = 0;<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>    for (StoreFile s : this.storeEngine.getStoreFileManager().getStorefiles()) {<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>      StoreFile.Reader r = s.getReader();<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>      if (r == null) {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        continue;<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>      }<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      size += r.getTotalBloomSize();<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>    return size;<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>  }<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span><a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>  @Override<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>  public long getMemStoreSize() {<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>    return this.memstore.size();<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>  }<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span><a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>  @Override<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>  public int getCompactPriority() {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>    int priority = this.storeEngine.getStoreFileManager().getStoreCompactionPriority();<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    if (priority == PRIORITY_USER) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      LOG.warn("Compaction priority is USER despite there being no user compaction");<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>    return priority;<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>  }<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>  @Override<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>  public boolean throttleCompaction(long compactionSize) {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>    return storeEngine.getCompactionPolicy().throttleCompaction(compactionSize);<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>  }<a name="line.2049"></a>
 <span class="sourceLineNo">2050</span><a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>    /**<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>     * This is not thread safe. The caller should have a lock on the region or the store.<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>     * If necessary, the lock can be added with the patch provided in HBASE-10087<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>     */<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>    @Override<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    public void prepare() {<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>      // passing the current sequence number of the wal - to allow bookkeeping in the memstore<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      this.snapshot = memstore.snapshot(cacheFlushSeqNum);<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>      this.cacheFlushCount = snapshot.getCellsCount();<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>      this.cacheFlushSize = snapshot.getSize();<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>      committedFiles = new ArrayList&lt;Path&gt;(1);<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>    }<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    @Override<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    public void flushCache(MonitoredTask status) throws IOException {<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>      RegionServerServices rsService = region.getRegionServerServices();<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>      ThroughputController throughputController =<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>          rsService == null ? null : rsService.getFlushThroughputController();<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>      tempFiles = HStore.this.flushCache(cacheFlushSeqNum, snapshot, status, throughputController);<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>    }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>    @Override<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    public boolean commit(MonitoredTask status) throws IOException {<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>      if (this.tempFiles == null || this.tempFiles.isEmpty()) {<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>        return false;<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      }<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;StoreFile&gt;(this.tempFiles.size());<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      for (Path storeFilePath : tempFiles) {<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>        try {<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>          storeFiles.add(HStore.this.commitFile(storeFilePath, cacheFlushSeqNum, status));<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>        } catch (IOException ex) {<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>          LOG.error("Failed to commit store file " + storeFilePath, ex);<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>          // Try to delete the files we have committed before.<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>          for (StoreFile sf : storeFiles) {<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>            Path pathToDelete = sf.getPath();<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>            try {<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>              sf.deleteReader();<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>            } catch (IOException deleteEx) {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>              LOG.fatal("Failed to delete store file we committed, halting " + pathToDelete, ex);<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>              Runtime.getRuntime().halt(1);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>            }<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>          }<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>          throw new IOException("Failed to commit the flush", ex);<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>        }<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>      }<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span><a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>      for (StoreFile sf : storeFiles) {<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>        if (HStore.this.getCoprocessorHost() != null) {<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>          HStore.this.getCoprocessorHost().postFlush(HStore.this, sf);<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span>        }<a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>        committedFiles.add(sf.getPath());<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      }<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span><a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>      HStore.this.flushedCellsCount += cacheFlushCount;<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>      HStore.this.flushedCellsSize += cacheFlushSize;<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span><a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>      // Add new file to store files.  Clear snapshot too while we have the Store write lock.<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>      return HStore.this.updateStorefiles(storeFiles, snapshot.getId());<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    }<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span><a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>    @Override<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    public List&lt;Path&gt; getCommittedFiles() {<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>      return committedFiles;<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    }<a name="line.2114"></a>
+<span class="sourceLineNo">2051</span>  public HRegion getHRegion() {<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>    return this.region;<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>  }<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span><a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>  @Override<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>  public RegionCoprocessorHost getCoprocessorHost() {<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>    return this.region.getCoprocessorHost();<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>  }<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span><a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>  @Override<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>  public HRegionInfo getRegionInfo() {<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>    return this.fs.getRegionInfo();<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>  }<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span><a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>  @Override<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>  public boolean areWritesEnabled() {<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>    return this.region.areWritesEnabled();<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>  }<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span><a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>  @Override<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>  public long getSmallestReadPoint() {<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    return this.region.getSmallestReadPoint();<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>  }<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span><a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  /**<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>   * Updates the value for the given row/family/qualifier. This function will always be seen as<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>   * atomic by other readers because it only puts a single KV to memstore. Thus no read/write<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>   * control necessary.<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>   * @param row row to update<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>   * @param f family to update<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>   * @param qualifier qualifier to update<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>   * @param newValue the new value to set into memstore<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>   * @return memstore size delta<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>   * @throws IOException<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>   */<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>  @VisibleForTesting<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>  public long updateColumnValue(byte [] row, byte [] f,<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>                                byte [] qualifier, long newValue)<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      throws IOException {<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span><a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>    this.lock.readLock().lock();<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    try {<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span><a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>      return this.memstore.updateColumnValue(row,<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>          f,<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>          qualifier,<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>          newValue,<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>          now);<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span><a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>    } finally {<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>      this.lock.readLock().unlock();<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span>    }<a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>  }<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span><a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>  @Override<a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>  public long upsert(Iterable&lt;Cell&gt; cells, long readpoint) throws IOException {<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>    this.lock.readLock().lock();<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>    try {<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>      return this.memstore.upsert(cells, readpoint);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>    } finally {<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>      this.lock.readLock().unlock();<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    }<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>  }<a name="line.2114"></a>
 <span class="sourceLineNo">2115</span><a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    /**<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>     * Similar to commit, but called in secondary region replicas for replaying the<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>     * flush cache from primary region. Adds the new files to the store, and drops the<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>     * snapshot depending on dropMemstoreSnapshot argument.<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>     * @param fileNames names of the flushed files<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>     * @param dropMemstoreSnapshot whether to drop the prepared memstore snapshot<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>     * @throws IOException<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>     */<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    @Override<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>    public void replayFlush(List&lt;String&gt; fileNames, boolean dropMemstoreSnapshot)<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        throws IOException {<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;StoreFile&gt;(fileNames.size());<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      for (String file : fileNames) {<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>        // open the file as a store file (hfile link, etc)<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>        StoreFileInfo storeFileInfo = fs.getStoreFileInfo(getColumnFamilyName(), file);<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>        StoreFile storeFile = createStoreFileAndReader(storeFileInfo);<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>        storeFiles.add(storeFile);<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>        HStore.this.storeSize += storeFile.getReader().length();<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>        HStore.this.totalUncompressedBytes += storeFile.getReader().getTotalUncompressedBytes();<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>        if (LOG.isInfoEnabled()) {<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>          LOG.info("Region: " + HStore.this.getRegionInfo().getEncodedName() +<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>            " added " + storeFile + ", entries=" + storeFile.getReader().getEntries() +<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>            ", sequenceid=" +  + storeFile.getReader().getSequenceID() +<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>            ", filesize=" + StringUtils.humanReadableInt(storeFile.getReader().length()));<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>        }<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>      }<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span><a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>      long snapshotId = -1; // -1 means do not drop<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>      if (dropMemstoreSnapshot &amp;&amp; snapshot != null) {<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>        snapshotId = snapshot.getId();<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>      }<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>      HStore.this.updateStorefiles(storeFiles, snapshotId);<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>    }<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span><a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>    /**<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>     * Abort the snapshot preparation. Drops the snapshot if any.<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>     * @throws IOException<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>     */<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>    @Override<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>    public void abort() throws IOException {<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>      if (snapshot == null) {<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>        return;<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>      }<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>      HStore.this.updateStorefiles(new ArrayList&lt;StoreFile&gt;(0), snapshot.getId());<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    }<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>  }<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span><a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>  @Override<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>  public boolean needsCompaction() {<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    return this.storeEngine.needsCompaction(this.filesCompacting);<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>  }<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span><a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>  @Override<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>  public CacheConfig getCacheConfig() {<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>    return this.cacheConf;<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>  }<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span><a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>  public static final long FIXED_OVERHEAD =<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>      ClassSize.align(ClassSize.OBJECT + (16 * ClassSize.REFERENCE) + (10 * Bytes.SIZEOF_LONG)<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>              + (5 * Bytes.SIZEOF_INT) + (2 * Bytes.SIZEOF_BOOLEAN));<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span><a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>  public static final long DEEP_OVERHEAD = ClassSize.align(FIXED_OVERHEAD<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>      + ClassSize.OBJECT + ClassSize.REENTRANT_LOCK<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>      + ClassSize.CONCURRENT_SKIPLISTMAP<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>      + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + ClassSize.OBJECT<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>      + ScanInfo.FIXED_OVERHEAD);<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span><a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>  @Override<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>  public long heapSize() {<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>    return DEEP_OVERHEAD + this.memstore.heapSize();<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>  }<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span><a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>  @Override<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>  public CellComparator getComparator() {<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>    return comparator;<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>  }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span><a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>  @Override<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>  public ScanInfo getScanInfo() {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    return scanInfo;<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>  }<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span><a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>  /**<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   * Set scan info, used by test<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>   * @param scanInfo new scan info to use for test<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>   */<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>  void setScanInfo(ScanInfo scanInfo) {<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>    this.scanInfo = scanInfo;<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>  }<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span><a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>  @Override<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>  public boolean hasTooManyStoreFiles() {<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    return getStorefilesCount() &gt; this.blockingFileCount;<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>  }<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span><a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>  @Override<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>  public long getFlushedCellsCount() {<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    return flushedCellsCount;<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>  }<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span><a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>  @Override<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>  public long getFlushedCellsSize() {<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    return flushedCellsSize;<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  }<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span><a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  @Override<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>  public long getCompactedCellsCount() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    return compactedCellsCount;<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>  }<a name="line.2224"></a>
+<span class="sourceLineNo">2116</span>  @Override<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>  public StoreFlushContext createFlushContext(long cacheFlushId) {<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>    return new StoreFlusherImpl(cacheFlushId);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>  }<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span><a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>  private final class StoreFlusherImpl implements StoreFlushContext {<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span><a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>    private long cacheFlushSeqNum;<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>    private MemStoreSnapshot snapshot;<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>    private List&lt;Path&gt; tempFiles;<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>    private List&lt;Path&gt; committedFiles;<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>    private long cacheFlushCount;<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    private long cacheFlushSize;<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span><a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>    private StoreFlusherImpl(long cacheFlushSeqNum) {<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>      this.cacheFlushSeqNum = cacheFlushSeqNum;<a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>    /**<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>     * This is not thread safe. The caller should have a lock on the region or the store.<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>     * If necessary, the lock can be added with the patch provided in HBASE-10087<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>     */<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>    @Override<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    public void prepare() {<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      // passing the current sequence number of the wal - to allow bookkeeping in the memstore<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>      this.snapshot = memstore.snapshot(cacheFlushSeqNum);<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>      this.cacheFlushCount = snapshot.getCellsCount();<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      this.cacheFlushSize = snapshot.getSize();<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>      committedFiles = new ArrayList&lt;Path&gt;(1);<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    }<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span><a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>    @Override<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>    public void flushCache(MonitoredTask status) throws IOException {<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>      RegionServerServices rsService = region.getRegionServerServices();<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>      ThroughputController throughputController =<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>          rsService == null ? null : rsService.getFlushThroughputController();<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>      tempFiles = HStore.this.flushCache(cacheFlushSeqNum, snapshot, status, throughputController);<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>    }<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span><a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>    @Override<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>    public boolean commit(MonitoredTask status) throws IOException {<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>      if (this.tempFiles == null || this.tempFiles.isEmpty()) {<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>        return false;<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>      }<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;StoreFile&gt;(this.tempFiles.size());<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>      for (Path storeFilePath : tempFiles) {<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>        try {<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>          storeFiles.add(HStore.this.commitFile(storeFilePath, cacheFlushSeqNum, status));<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>        } catch (IOException ex) {<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>          LOG.error("Failed to commit store file " + storeFilePath, ex);<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>          // Try to delete the files we have committed before.<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>          for (StoreFile sf : storeFiles) {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>            Path pathToDelete = sf.getPath();<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>            try {<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>              sf.deleteReader();<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>            } catch (IOException deleteEx) {<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>              LOG.fatal("Failed to delete store file we committed, halting " + pathToDelete, ex);<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>              Runtime.getRuntime().halt(1);<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>            }<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>          }<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>          throw new IOException("Failed to commit the flush", ex);<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>        }<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>      }<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span><a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>      for (StoreFile sf : storeFiles) {<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>        if (HStore.this.getCoprocessorHost() != null) {<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>          HStore.this.getCoprocessorHost().postFlush(HStore.this, sf);<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>        }<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>        committedFiles.add(sf.getPath());<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>      }<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span><a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>      HStore.this.flushedCellsCount += cacheFlushCount;<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      HStore.this.flushedCellsSize += cacheFlushSize;<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span><a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>      // Add new file to store files.  Clear snapshot too while we have the Store write lock.<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>      return HStore.this.updateStorefiles(storeFiles, snapshot.getId());<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>    }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span><a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>    @Override<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>    public List&lt;Path&gt; getCommittedFiles() {<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>      return committedFiles;<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>    }<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span><a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>    /**<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>     * Similar to commit, but called in secondary region replicas for replaying the<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>     * flush cache from primary region. Adds the new files to the store, and drops the<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>     * snapshot depending on dropMemstoreSnapshot argument.<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>     * @param fileNames names of the flushed files<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>     * @param dropMemstoreSnapshot whether to drop the prepared memstore snapshot<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>     * @throws IOException<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>     */<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>    @Override<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    public void replayFlush(List&lt;String&gt; fileNames, boolean dropMemstoreSnapshot)<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>        throws IOException {<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>      List&lt;StoreFile&gt; storeFiles = new ArrayList&lt;StoreFile&gt;(fileNames.size());<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>      for (String file : fileNames) {<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>        // open the file as a store file (hfile link, etc)<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>        StoreFileInfo storeFileInfo = fs.getStoreFileInfo(getColumnFamilyName(), file);<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>        StoreFile storeFile = createStoreFileAndReader(storeFileInfo);<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>        storeFiles.add(storeFile);<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>        HStore.this.storeSize += storeFile.getReader().length();<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>        HStore.this.totalUncompressedBytes += storeFile.getReader().getTotalUncompressedBytes();<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>        if (LOG.isInfoEnabled()) {<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>          LOG.info("Region: " + HStore.this.getRegionInfo().getEncodedName() +<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>            " added " + storeFile + ", entries=" + storeFile.getReader().getEntries() +<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>            ", sequenceid=" +  + storeFile.getReader().getSequenceID() +<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>            ", filesize=" + StringUtils.humanReadableInt(storeFile.getReader().length()));<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        }<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>      }<a name="line.2224"></a>
 <span class="sourceLineNo">2225</span><a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>  @Override<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  public long getCompactedCellsSize() {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    return compactedCellsSize;<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>  }<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span><a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>  @Override<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>  public long getMajorCompactedCellsCount() {<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>    return majorCompactedCellsCount;<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>  }<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span><a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>  @Override<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>  public long getMajorCompactedCellsSize() {<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>    return majorCompactedCellsSize;<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  }<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span><a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  /**<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>   * Returns the StoreEngine that is backing this concrete implementation of Store.<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>   * @return Returns the {@link StoreEngine} object used internally inside this HStore object.<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>   */<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>  @VisibleForTesting<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  public StoreEngine&lt;?, ?, ?, ?&gt; getStoreEngine() {<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>    return this.storeEngine;<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  }<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span><a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>  protected OffPeakHours getOffPeakHours() {<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>    return this.offPeakHours;<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>  }<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span><a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>  /**<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * {@inheritDoc}<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   */<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>  @Override<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>  public void onConfigurationChange(Configuration conf) {<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>    this.conf = new CompoundConfiguration()<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>            .add(conf)<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>            .addBytesMap(family.getValues());<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>    this.storeEngine.compactionPolicy.setConf(conf);<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>    this.offPeakHours = OffPeakHours.getInstance(conf);<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>  }<a name="line.2264"></a>
+<span class="sourceLineNo">2226</span>      long snapshotId = -1; // -1 means do not drop<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      if (dropMemstoreSnapshot &amp;&amp; snapshot != null) {<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>        snapshotId = snapshot.getId();<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>      }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>      HStore.this.updateStorefiles(storeFiles, snapshotId);<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>    }<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span><a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>    /**<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>     * Abort the snapshot preparation. Drops the snapshot if any.<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>     * @throws IOException<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>     */<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>    @Override<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>    public void abort() throws IOException {<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>      if (snapshot == null) {<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>        return;<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>      }<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      HStore.this.updateStorefiles(new ArrayList&lt;StoreFile&gt;(0), snapshot.getId());<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    }<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>  }<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span><a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>  @Override<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>  public boolean needsCompaction() {<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>    return this.storeEngine.needsCompaction(this.filesCompacting);<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>  }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span><a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>  @Override<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>  public CacheConfig getCacheConfig() {<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>    return this.cacheConf;<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>  }<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span><a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>  public static final long FIXED_OVERHEAD =<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>      ClassSize.align(ClassSize.OBJECT + (16 * ClassSize.REFERENCE) + (10 * Bytes.SIZEOF_LONG)<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>              + (5 * Bytes.SIZEOF_INT) + (2 * Bytes.SIZEOF_BOOLEAN));<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  public static final long DEEP_OVERHEAD = ClassSize.align(FIXED_OVERHEAD<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>      + ClassSize.OBJECT + ClassSize.REENTRANT_LOCK<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>      + ClassSize.CONCURRENT_SKIPLISTMAP<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>      + ClassSize.CONCURRENT_SKIPLISTMAP_ENTRY + ClassSize.OBJECT<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>      + ScanInfo.FIXED_OVERHEAD);<a name="line.2264"></a>
 <span class="sourceLineNo">2265</span><a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>  /**<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>   * {@inheritDoc}<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>   */<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>  @Override<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>    // No children to register<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>  }<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span><a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>  /**<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>   * {@inheritDoc}<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>   */<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>  @Override<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>    // No children to deregister<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>  }<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span><a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>  @Override<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>  public double getCompactionPressure() {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>    return storeEngine.getStoreFileManager().getCompactionPressure();<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>  }<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span><a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>  @Override<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>  public boolean isPrimaryReplicaStore() {<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>     return getRegionInfo().getReplicaId() == HRegionInfo.DEFAULT_REPLICA_ID;<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>  }<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span><a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>  @Override<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>  public void closeAndArchiveCompactedFiles() throws IOException {<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>    lock.readLock().lock();<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>    Collection&lt;StoreFile&gt; copyCompactedfiles = null;<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    try {<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>      Collection&lt;StoreFile&gt; compactedfiles =<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>          this.getStoreEngine().getStoreFileManager().getCompactedfiles();<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>      if (compactedfiles != null &amp;&amp; compactedfiles.size() != 0) {<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>        // Do a copy under read lock<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>        copyCompactedfiles = new ArrayList&lt;StoreFile&gt;(compactedfiles);<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>      } else {<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>        if (LOG.isTraceEnabled()) {<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>          LOG.trace("No compacted files to archive");<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>          return;<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>        }<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>      }<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>    } finally {<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      lock.readLock().unlock();<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>    if (copyCompactedfiles != null &amp;&amp; !copyCompactedfiles.isEmpty()) {<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>      removeCompactedfiles(copyCompactedfiles);<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>    }<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>  }<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span><a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>  /**<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>   * Archives and removes the compacted files<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>   * @param compactedfiles The compacted files in this store that are not active in reads<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>   * @throws IOException<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>   */<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>  private void removeCompactedfiles(Collection&lt;StoreFile&gt; compactedfiles)<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      throws IOException {<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>    final List&lt;StoreFile&gt; filesToRemove = new ArrayList&lt;StoreFile&gt;(compactedfiles.size());<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    for (final StoreFile file : compactedfiles) {<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>      synchronized (file) {<a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>        try {<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>          StoreFile.Reader r = file.getReader();<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>          if (r == null) {<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>            if (LOG.isDebugEnabled()) {<a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>              LOG.debug("The file " + file + " was closed but still not archived.");<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>            }<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>            filesToRemove.add(file);<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>          }<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>          if (r != null &amp;&amp; r.isCompactedAway() &amp;&amp; !r.isReferencedInReads()) {<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>            // Even if deleting fails we need not bother as any new scanners won't be<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>            // able to use the compacted file as the status is already compactedAway<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>            if (LOG.isTraceEnabled()) {<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>              LOG.trace("Closing and archiving the file " + file.getPath());<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>            }<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>            r.close(true);<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>            // Just close and return<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>            filesToRemove.add(file);<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>          }<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        } catch (Exception e) {<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          LOG.error(<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>            "Exception while trying to close the compacted store file " + file.getPath().getName());<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>        }<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>      }<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>    }<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>    if (this.isPrimaryReplicaStore()) {<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      // Only the primary region is allowed to move the file to archive.<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>      // The secondary region does not move the files to archive. Any active reads from<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>      // the secondary region will still work because the file as such has active readers on it.<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>      if (!filesToRemove.isEmpty()) {<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        if (LOG.isDebugEnabled()) {<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>          LOG.debug("Moving the files " + filesToRemove + " to archive");<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>        }<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>        // Only if this is successful it has to be removed<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>        this.fs.removeStoreFiles(this.getFamily().getNameAsString(), filesToRemove);<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>      }<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    }<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>    if (!filesToRemove.isEmpty()) {<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>      // Clear the compactedfiles from the store file manager<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>      clearCompactedfiles(filesToRemove);<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    }<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>  }<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span><a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>  private void clearCompactedfiles(final List&lt;StoreFile&gt; filesToRemove) throws IOException {<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    if (LOG.isTraceEnabled()) {<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>      LOG.trace("Clearing the compacted file " + filesToRemove + " from this store");<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    }<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>    try {<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>      lock.writeLock().lock();<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>      this.getStoreEngine().getStoreFileManager().removeCompactedFiles(filesToRemove);<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    } finally {<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>      lock.writeLock().unlock();<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>    }<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>  }<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>}<a name="line.2379"></a>
+<span class="sourceLineNo">2266</span>  @Override<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>  public long heapSize() {<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>    return DEEP_OVERHEAD + this.memstore.heapSize();<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>  }<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span><a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>  @Override<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>  public CellComparator getComparator() {<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>    return comparator;<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>  }<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span><a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>  @Override<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>  public ScanInfo getScanInfo() {<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>    return scanInfo;<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span><a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>  /**<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>   * Set scan info, used by test<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>   * @param scanInfo new scan info to use for test<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>   */<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>  void setScanInfo(ScanInfo scanInfo) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>    this.scanInfo = scanInfo;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>  }<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span><a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>  @Override<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>  public boolean hasTooManyStoreFiles() {<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>    return getStorefilesCount() &gt; this.blockingFileCount;<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>  }<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span><a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>  @Override<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>  public long getFlushedCellsCount() {<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>    return flushedCellsCount;<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>  }<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span><a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>  @Override<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>  public long getFlushedCellsSize() {<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>    return flushedCellsSize;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>  }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span><a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>  @Override<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>  public long getCompactedCellsCount() {<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>    return compactedCellsCount;<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>  }<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span><a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>  @Override<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>  public long getCompactedCellsSize() {<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>    return compactedCellsSize;<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>  }<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span><a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>  @Override<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>  public long getMajorCompactedCellsCount() {<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    return majorCompactedCellsCount;<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>  }<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span><a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>  @Override<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>  public long getMajorCompactedCellsSize() {<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>    return majorCompactedCellsSize;<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>  }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span><a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>  /**<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>   * Returns the StoreEngine that is backing this concrete implementation of Store.<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>   * @return Returns the {@link StoreEngine} object used internally inside this HStore object.<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>   */<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>  @VisibleForTesting<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>  public StoreEngine&lt;?, ?, ?, ?&gt; getStoreEngine() {<a name="line.2329"></a>
+<span class="sourceLineNo">2330</span>    return this.storeEngine;<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>  }<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span><a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>  protected OffPeakHours getOffPeakHours() {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    return this.offPeakHours;<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>  }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span><a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>  /**<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>   * {@inheritDoc}<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>   */<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>  @Override<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>  public void onConfigurationChange(Configuration conf) {<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>    this.conf = new CompoundConfiguration()<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>            .add(conf)<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>            .addBytesMap(family.getValues());<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>    this.storeEngine.compactionPolicy.setConf(conf);<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>    this.offPeakHours = OffPeakHours.getInstance(conf);<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>  }<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span><a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>  /**<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>   * {@inheritDoc}<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>   */<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>  @Override<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>  public void registerChildren(ConfigurationManager manager) {<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>    // No children to register<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>  }<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span><a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>  /**<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>   * {@inheritDoc}<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   */<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>  @Override<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>  public void deregisterChildren(ConfigurationManager manager) {<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>    // No children to deregister<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>  }<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span><a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>  @Override<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>  public double getCompactionPressure() {<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    return storeEngine.getStoreFileManager().getCompactionPressure();<a nam

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html
index f96172e..764c0af 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.990">Canary.RegionServerMonitor</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.1037">Canary.RegionServerMonitor</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></pre>
 </li>
 </ul>
@@ -138,7 +138,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.tool.<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#admin">admin</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#connection">connection</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#done">done</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#errorCode">errorCode</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#executor">executor</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#initialized">initialized</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#sink">sink</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#targets">targets</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#useRegExp">useRegExp</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#admin">admin</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#connection">connection</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#done">done</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#errorCode">errorCode</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#executor">executor</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#initialized">initialized</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#sink">sink</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#targets">targets</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#treatFailureAsError">treatFailureAsError</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#useRegExp">useRegExp</a></code></li
 >
 </ul>
 </li>
 </ul>
@@ -154,12 +154,13 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#Canary.RegionServerMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.ExtendedSink,%20java.util.concurrent.ExecutorService,%20boolean)">Canary.RegionServerMonitor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#Canary.RegionServerMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.ExtendedSink,%20java.util.concurrent.ExecutorService,%20boolean,%20boolean)">Canary.RegionServerMonitor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                                     <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;monitorTargets,
                                                     boolean&nbsp;useRegExp,
                                                     <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.ExtendedSink</a>&nbsp;sink,
                                                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
-                                                    boolean&nbsp;allRegions)</code>&nbsp;</td>
+                                                    boolean&nbsp;allRegions,
+                                                    boolean&nbsp;treatFailureAsError)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -210,7 +211,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.tool.<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#hasError()">hasError</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#initAdmin()">initAdmin</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#isDone()">isDone</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#finalCheckForErrors()">finalCheckForErrors</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#hasError()">hasError</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#initAdmin()">initAdmin</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#isDone()">isDone</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -239,7 +240,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>allRegions</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.992">allRegions</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1039">allRegions</a></pre>
 </li>
 </ul>
 </li>
@@ -250,18 +251,19 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="Canary.RegionServerMonitor(org.apache.hadoop.hbase.client.Connection, java.lang.String[], boolean, org.apache.hadoop.hbase.tool.Canary.ExtendedSink, java.util.concurrent.ExecutorService, boolean)">
+<a name="Canary.RegionServerMonitor(org.apache.hadoop.hbase.client.Connection, java.lang.String[], boolean, org.apache.hadoop.hbase.tool.Canary.ExtendedSink, java.util.concurrent.ExecutorService, boolean, boolean)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Canary.RegionServerMonitor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.994">Canary.RegionServerMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1041">Canary.RegionServerMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                           <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;monitorTargets,
                           boolean&nbsp;useRegExp,
                           <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.ExtendedSink</a>&nbsp;sink,
                           <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
-                          boolean&nbsp;allRegions)</pre>
+                          boolean&nbsp;allRegions,
+                          boolean&nbsp;treatFailureAsError)</pre>
 </li>
 </ul>
 </li>
@@ -278,7 +280,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getSink</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.ExtendedSink</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1000">getSink</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.ExtendedSink</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1048">getSink</a>()</pre>
 </li>
 </ul>
 <a name="run()">
@@ -287,7 +289,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1005">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1053">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>
@@ -302,7 +304,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkNoTableNames</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1014">checkNoTableNames</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1062">checkNoTableNames</a>()</pre>
 </li>
 </ul>
 <a name="monitorRegionServers(java.util.Map)">
@@ -311,7 +313,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>monitorRegionServers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1047">monitorRegionServers</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/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&gt;&nbsp;rsAndRMap)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1095">monitorRegionServers</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/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&gt;&nbsp;rsAndRMap)</pre>
 </li>
 </ul>
 <a name="filterRegionServerByName()">
@@ -320,7 +322,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>filterRegionServerByName</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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1095">filterRegionServerByName</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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1143">filterRegionServerByName</a>()</pre>
 </li>
 </ul>
 <a name="getAllRegionServerByName()">
@@ -329,7 +331,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllRegionServerByName</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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1101">getAllRegionServerByName</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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1149">getAllRegionServerByName</a>()</pre>
 </li>
 </ul>
 <a name="doFilterRegionServerByName(java.util.Map)">
@@ -338,7 +340,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doFilterRegionServerByName</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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1148">doFilterRegionServerByName</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/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&gt;&nbsp;fullRsAndRMap)</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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerMonitor.html#line.1196">doFilterRegionServerByName</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/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;&gt;&nbsp;fullRsAndRMap)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html
index b41c749..e6dac23 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.149">Canary.RegionServerStdOutSink</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.174">Canary.RegionServerStdOutSink</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html" title="class in org.apache.hadoop.hbase.tool">Canary.StdOutSink</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.ExtendedSink</a></pre>
 </li>
@@ -163,7 +163,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedS
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.tool.<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html" title="class in org.apache.hadoop.hbase.tool">Canary.StdOutSink</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishReadTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishReadTiming</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishWriteFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Except
 ion)">publishWriteFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishWriteTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishWriteTiming</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#getReadFailureCount()">getReadFailureCount</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#getWriteFailureCount()">getWriteFailureCount</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#incReadFailureCount()">incReadFailureCount</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishReadTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishReadTiming</a>, <a h
 ref="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishWriteFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishWriteFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#publishWriteTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishWriteTiming</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -177,7 +177,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedS
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.tool.<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishReadTiming</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishWriteFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishWriteFailure</a>,
  <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishWriteTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishWriteTiming</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#getReadFailureCount()">getReadFailureCount</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#getWriteFailureCount()">getWriteFailureCount</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#incReadFailureCount()">incReadFailureCount</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishReadTiming</a>, <a href="../../../../../org/apache/hadoo
 p/hbase/tool/Canary.Sink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishWriteFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishWriteFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishWriteTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishWriteTiming</a></code></li>
 </ul>
 </li>
 </ul>
@@ -199,7 +199,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedS
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Canary.RegionServerStdOutSink</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html#line.149">Canary.RegionServerStdOutSink</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html#line.174">Canary.RegionServerStdOutSink</a>()</pre>
 </li>
 </ul>
 </li>
@@ -216,7 +216,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedS
 <ul class="blockList">
 <li class="blockList">
 <h4>publishReadFailure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html#line.152">publishReadFailure</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;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html#line.177">publishReadFailure</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;table,
                       <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;server)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -230,7 +230,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedS
 <ul class="blockListLast">
 <li class="blockList">
 <h4>publishReadTiming</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html#line.157">publishReadTiming</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;table,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html#line.183">publishReadTiming</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;table,
                      <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;server,
                      long&nbsp;msTime)</pre>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html
index 7513bf8..9e5bbc4 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.324">Canary.RegionServerTask</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.350">Canary.RegionServerTask</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="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</pre>
 <div class="block">Get one row from a region on the regionserver and outputs the latency, or the failure.</div>
@@ -213,7 +213,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>connection</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#line.325">connection</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#line.351">connection</a></pre>
 </li>
 </ul>
 <a name="serverName">
@@ -222,7 +222,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>serverName</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/tool/Canary.RegionServerTask.html#line.326">serverName</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/tool/Canary.RegionServerTask.html#line.352">serverName</a></pre>
 </li>
 </ul>
 <a name="region">
@@ -231,7 +231,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>region</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#line.327">region</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#line.353">region</a></pre>
 </li>
 </ul>
 <a name="sink">
@@ -240,7 +240,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>sink</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.ExtendedSink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#line.328">sink</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.ExtendedSink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#line.354">sink</a></pre>
 </li>
 </ul>
 <a name="successes">
@@ -249,7 +249,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>successes</h4>
-<pre>private&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/tool/Canary.RegionServerTask.html#line.329">successes</a></pre>
+<pre>private&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/tool/Canary.RegionServerTask.html#line.355">successes</a></pre>
 </li>
 </ul>
 </li>
@@ -266,7 +266,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Canary.RegionServerTask</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#line.331">Canary.RegionServerTask</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#line.357">Canary.RegionServerTask</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                        <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;serverName,
                        <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                        <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.ExtendedSink</a>&nbsp;sink,
@@ -287,7 +287,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#line.341">call</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html#line.367">call</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true#call()" title="class or interface in java.util.concurrent">call</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html
index 8c2d6d5..637afde 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.168">Canary.RegionTask.TaskType</a>
+<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.194">Canary.RegionTask.TaskType</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a>&gt;</pre>
 </li>
 </ul>
@@ -196,7 +196,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>READ</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html#line.169">READ</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html#line.195">READ</a></pre>
 </li>
 </ul>
 <a name="WRITE">
@@ -205,7 +205,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WRITE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html#line.169">WRITE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html#line.195">WRITE</a></pre>
 </li>
 </ul>
 </li>
@@ -222,7 +222,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html#line.168">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html#line.194">values</a>()</pre>
 <div class="block">Returns an array containing the constants of this enum type, in
 the order they are declared.  This method may be used to iterate
 over the constants as follows:
@@ -239,7 +239,7 @@ for (Canary.RegionTask.TaskType c : Canary.RegionTask.TaskType.values())
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html#line.168">valueOf</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>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html#line.194">valueOf</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>
 <div class="block">Returns the enum constant of this type with the specified name.
 The string must match <i>exactly</i> an identifier used to declare an
 enum constant in this type.  (Extraneous whitespace characters are 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionTask.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionTask.html
index eb67b8f..e74a160 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionTask.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionTask.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.167">Canary.RegionTask</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.193">Canary.RegionTask</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="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</pre>
 <div class="block">For each column family of the region tries to get one row and outputs the latency, or the
@@ -238,7 +238,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>connection</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.171">connection</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.197">connection</a></pre>
 </li>
 </ul>
 <a name="region">
@@ -247,7 +247,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>region</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.172">region</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.198">region</a></pre>
 </li>
 </ul>
 <a name="sink">
@@ -256,7 +256,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>sink</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.173">sink</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.199">sink</a></pre>
 </li>
 </ul>
 <a name="taskType">
@@ -265,7 +265,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>taskType</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.174">taskType</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.200">taskType</a></pre>
 </li>
 </ul>
 </li>
@@ -282,7 +282,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Canary.RegionTask</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.176">Canary.RegionTask</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.202">Canary.RegionTask</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                  <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                  <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
                  <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a>&nbsp;taskType)</pre>
@@ -302,7 +302,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.184">call</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.210">call</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true#call()" title="class or interface in java.util.concurrent">call</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></dd>
@@ -315,7 +315,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>read</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.195">read</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.221">read</a>()</pre>
 </li>
 </ul>
 <a name="write()">
@@ -324,7 +324,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>write</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.281">write</a>()</pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html#line.307">write</a>()</pre>
 <div class="block">Check writes for the canary table</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd></dd></dl>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.Sink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.Sink.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.Sink.html
index ec5e6ea..e3287e5 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.Sink.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.Sink.html
@@ -119,34 +119,46 @@
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#getReadFailureCount()">getReadFailureCount</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#getWriteFailureCount()">getWriteFailureCount</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#incReadFailureCount()">incReadFailureCount</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/tool/Canary.Sink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishReadFailure</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                     <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>&nbsp;e)</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/tool/Canary.Sink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishReadFailure</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                     <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                                     <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>&nbsp;e)</code>&nbsp;</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/tool/Canary.Sink.html#publishReadTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishReadTiming</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                   <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                                   long&nbsp;msTime)</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/tool/Canary.Sink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishWriteFailure</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                       <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>&nbsp;e)</code>&nbsp;</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/tool/Canary.Sink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishWriteFailure</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                       <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                                       <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>&nbsp;e)</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/tool/Canary.Sink.html#publishWriteTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishWriteTiming</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                     <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
@@ -167,13 +179,31 @@
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="getReadFailureCount()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getReadFailureCount</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.97">getReadFailureCount</a>()</pre>
+</li>
+</ul>
+<a name="incReadFailureCount()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>incReadFailureCount</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.98">incReadFailureCount</a>()</pre>
+</li>
+</ul>
 <a name="publishReadFailure(org.apache.hadoop.hbase.HRegionInfo, java.lang.Exception)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>publishReadFailure</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.97">publishReadFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.99">publishReadFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                       <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>&nbsp;e)</pre>
 </li>
 </ul>
@@ -183,7 +213,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>publishReadFailure</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.98">publishReadFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.100">publishReadFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                       <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                       <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>&nbsp;e)</pre>
 </li>
@@ -194,18 +224,27 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>publishReadTiming</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.99">publishReadTiming</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.101">publishReadTiming</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                      <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                      long&nbsp;msTime)</pre>
 </li>
 </ul>
+<a name="getWriteFailureCount()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getWriteFailureCount</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.102">getWriteFailureCount</a>()</pre>
+</li>
+</ul>
 <a name="publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo, java.lang.Exception)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>publishWriteFailure</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.100">publishWriteFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.103">publishWriteFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                        <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>&nbsp;e)</pre>
 </li>
 </ul>
@@ -215,7 +254,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>publishWriteFailure</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.101">publishWriteFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.104">publishWriteFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                        <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                        <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>&nbsp;e)</pre>
 </li>
@@ -226,7 +265,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>publishWriteTiming</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.102">publishWriteTiming</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html#line.105">publishWriteTiming</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                       <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                       long&nbsp;msTime)</pre>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html
index 958a7c6..b7ce542 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html
@@ -61,13 +61,13 @@
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method_summary">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method_detail">Method</a></li>
 </ul>
@@ -107,7 +107,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.113">Canary.StdOutSink</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.116">Canary.StdOutSink</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/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></pre>
 </li>
@@ -116,6 +116,29 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 <div class="summary">
 <ul class="blockList">
 <li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="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 <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></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#readFailureCount">readFailureCount</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <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></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#writeFailureCount">writeFailureCount</a></strong></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
 <!-- ======== CONSTRUCTOR SUMMARY ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor_summary">
@@ -146,34 +169,46 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#getReadFailureCount()">getReadFailureCount</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#getWriteFailureCount()">getWriteFailureCount</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#incReadFailureCount()">incReadFailureCount</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/tool/Canary.StdOutSink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishReadFailure</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                     <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>&nbsp;e)</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/tool/Canary.StdOutSink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishReadFailure</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                     <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                                     <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>&nbsp;e)</code>&nbsp;</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/tool/Canary.StdOutSink.html#publishReadTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishReadTiming</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                   <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                                   long&nbsp;msTime)</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/tool/Canary.StdOutSink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishWriteFailure</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                       <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>&nbsp;e)</code>&nbsp;</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/tool/Canary.StdOutSink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishWriteFailure</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                       <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                                       <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>&nbsp;e)</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/tool/Canary.StdOutSink.html#publishWriteTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishWriteTiming</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                                     <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
@@ -195,6 +230,32 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 <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="readFailureCount">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>readFailureCount</h4>
+<pre>private&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/tool/Canary.StdOutSink.html#line.117">readFailureCount</a></pre>
+</li>
+</ul>
+<a name="writeFailureCount">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>writeFailureCount</h4>
+<pre>private&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/tool/Canary.StdOutSink.html#line.118">writeFailureCount</a></pre>
+</li>
+</ul>
+</li>
+</ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor_detail">
@@ -207,7 +268,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Canary.StdOutSink</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.113">Canary.StdOutSink</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.116">Canary.StdOutSink</a>()</pre>
 </li>
 </ul>
 </li>
@@ -218,13 +279,39 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="getReadFailureCount()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getReadFailureCount</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.121">getReadFailureCount</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#getReadFailureCount()">getReadFailureCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="incReadFailureCount()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>incReadFailureCount</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.126">incReadFailureCount</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#incReadFailureCount()">incReadFailureCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="publishReadFailure(org.apache.hadoop.hbase.HRegionInfo, java.lang.Exception)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>publishReadFailure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.115">publishReadFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.131">publishReadFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                       <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>&nbsp;e)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -238,7 +325,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 <ul class="blockList">
 <li class="blockList">
 <h4>publishReadFailure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.120">publishReadFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.137">publishReadFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                       <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                       <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>&nbsp;e)</pre>
 <dl>
@@ -253,7 +340,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 <ul class="blockList">
 <li class="blockList">
 <h4>publishReadTiming</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.126">publishReadTiming</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.144">publishReadTiming</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                      <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                      long&nbsp;msTime)</pre>
 <dl>
@@ -262,13 +349,26 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 </dl>
 </li>
 </ul>
+<a name="getWriteFailureCount()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getWriteFailureCount</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.150">getWriteFailureCount</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#getWriteFailureCount()">getWriteFailureCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></code></dd>
+</dl>
+</li>
+</ul>
 <a name="publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo, java.lang.Exception)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>publishWriteFailure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.132">publishWriteFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.155">publishWriteFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                        <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>&nbsp;e)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -282,7 +382,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 <ul class="blockList">
 <li class="blockList">
 <h4>publishWriteFailure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.137">publishWriteFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.161">publishWriteFailure</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                        <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                        <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>&nbsp;e)</pre>
 <dl>
@@ -297,7 +397,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>publishWriteTiming</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.143">publishWriteTiming</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html#line.168">publishWriteTiming</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;region,
                       <a href="../../../../../org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;column,
                       long&nbsp;msTime)</pre>
 <dl>
@@ -358,13 +458,13 @@ implements <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li>Nested&nbsp;|&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field_summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method_summary">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field_detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method_detail">Method</a></li>
 </ul>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index a7ecd07..3927b3c 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="20160219" />
+    <meta name="Date-Revision-yyyymmdd" content="20160222" />
     <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" />
@@ -185,7 +185,7 @@
                       <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
 </li>
                   
-                      <li>      <a href="replication.html"  target="_blank" title="Cluster replication">Cluster replication</a>
+                      <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
                       <li class="dropdown-submenu">
@@ -280,10 +280,10 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>1683</td>
+<td>1686</td>
 <td>0</td>
 <td>0</td>
-<td>12746</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">
@@ -3686,7 +3686,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>2</td></tr>
+<td>3</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</a></td>
 <td>0</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>766</td>
+<td>767</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>3400</td>
+<td>3399</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>misc</td>
@@ -6152,7 +6152,7 @@
 <tr class="a">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_sizes.html#MethodLength">MethodLength</a></td>
-<td>32</td>
+<td>33</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>whitespace</td>
@@ -14553,7 +14553,7 @@
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 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">
@@ -58037,37 +58037,37 @@
 <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>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2084">2084</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/regionserver/HStore.html#L2122">2122</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2205">2205</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/HStore.html#L2152">2152</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2235">2235</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>'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>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2372">2372</a></td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>FileTabCharacter</td>
 <td>File contains tab characters (this is the first instance).</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2289">2289</a></td></tr>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2372">2372</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/regionserver/HStore.html#L2319">2319</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/HStore.html#L2402">2402</a></td></tr></table></div>
 <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">
@@ -59345,38 +59345,44 @@
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child have incorrect indentation level 3, expected level should be 4.</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html#L133">133</a></td></tr></table></div>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html#L133">133</a></td></tr>
+<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 151 lines (max allowed is 150).</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.html#L184">184</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.CompatibilitySingletonFactory' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#L30">30</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>MethodLength</td>
-<td>Method length is 159 lines (max allowed is 150).</td>
-<td><a href="./xref/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#L604">604</a></td></tr></table></div>
+<td>Method length is 186 lines (max allowed is 150).</td>
+<td><a href="./xref/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#L628">628</a></td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.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>
@@ -59385,49 +59391,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress.java">org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.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/MiniBatchOperationInProgress.html#L57">57</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/MiniBatchOperationInProgress.html#L68">68</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/MiniBatchOperationInProgress.html#L69">69</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/MiniBatchOperationInProgress.html#L76">76</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/MiniBatchOperationInProgress.html#L85">85</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/MiniBatchOperationInProgress.html#L86">86</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>
@@ -59436,25 +59442,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MultiRowMutationProcessor.java">org/apache/hadoop/hbase/regionserver/MultiRowMutationProcessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.Cell' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MultiRowMutationProcessor.html#L27">27</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>'MultiRowMutationProcessorResponse' have incorrect indentation level 0, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/MultiRowMutationProcessor.html#L43">43</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>
@@ -59463,37 +59469,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.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/MultiVersionConcurrencyControl.html#L24">24</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/MultiVersionConcurrencyControl.html#L72">72</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/MultiVersionConcurrencyControl.html#L77">77</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/MultiVersionConcurrencyControl.html#L78">78</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>
@@ -59502,13 +59508,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.NoOpHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/NoOpHeapMemoryTuner.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>
@@ -59517,13 +59523,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.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>
@@ -59532,13 +59538,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.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>
@@ -59547,61 +59553,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.OnlineRegions.java">org/apache/hadoop/hbase/regionserver/OnlineRegions.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.HBaseInterfaceAudience' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.html#L26">26</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.Server' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.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>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.html#L40">40</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/OnlineRegions.html#L57">57</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/OnlineRegions.html#L59">59</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/OnlineRegions.html#L65">65</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/OnlineRegions.html#L67">67</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 modifier' have incorrect indentation level 3, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/OnlineRegions.html#L69">69</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>
@@ -59610,13 +59616,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.OperationStatus.java">org/apache/hadoop/hbase/regionserver/OperationStatus.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>
@@ -59625,19 +59631,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RSDumpServlet.java">org/apache/hadoop/hbase/regionserver/RSDumpServlet.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/RSDumpServlet.html#L31">31</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -59646,835 +59652,835 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RSRpcServices.java">org/apache/hadoop/hbase/regionserver/RSRpcServices.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 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L188">188</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>'class def modifier' have incorrect indentation level 3, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L268">268</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/RSRpcServices.html#L303">303</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>'class def modifier' have incorrect indentation level 3, expected level should be 2.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L312">312</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/RSRpcServices.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>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L467">467</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/RSRpcServices.html#L480">480</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/RSRpcServices.html#L499">499</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/RSRpcServices.html#L500">500</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/RSRpcServices.html#L502">502</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/RSRpcServices.html#L538">538</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/RSRpcServices.html#L539">539</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/RSRpcServices.html#L541">541</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/RSRpcServices.html#L542">542</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/RSRpcServices.html#L543">543</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/RSRpcServices.html#L544">544</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 101).</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L574">574</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/RSRpcServices.html#L580">580</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/RSRpcServices.html#L581">581</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/RSRpcServices.html#L582">582</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/RSRpcServices.html#L584">584</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/RSRpcServices.html#L585">585</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/RSRpcServices.html#L619">619</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/RSRpcServices.html#L620">620</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/RSRpcServices.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/RSRpcServices.html#L657">657</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/RSRpcServices.html#L658">658</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/RSRpcServices.html#L659">659</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/RSRpcServices.html#L660">660</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/RSRpcServices.html#L662">662</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L691">691</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/RSRpcServices.html#L818">818</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/RSRpcServices.html#L819">819</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/RSRpcServices.html#L820">820</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/RSRpcServices.html#L895">895</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/RSRpcServices.html#L896">896</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/RSRpcServices.html#L897">897</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/RSRpcServices.html#L900">900</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 10, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L958">958</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/RSRpcServices.html#L1208">1208</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/RSRpcServices.html#L1285">1285</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/RSRpcServices.html#L1328">1328</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/RSRpcServices.html#L1386">1386</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/RSRpcServices.html#L1480">1480</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/RSRpcServices.html#L1530">1530</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/RSRpcServices.html#L1595">1595</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/RSRpcServices.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>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L1805">1805</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/RSRpcServices.html#L1906">1906</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/RSRpcServices.html#L1936">1936</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/RSRpcServices.html#L1959">1959</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/RSRpcServices.html#L2002">2002</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/RSRpcServices.html#L2097">2097</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/RSRpcServices.html#L2220">2220</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/RSRpcServices.html#L2353">2353</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/RSRpcServices.html#L2385">2385</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/RSRpcServices.html#L2387">2387</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>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2388">2388</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>'case' child have incorrect indentation level 6, expected level should be 8.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2389">2389</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>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2391">2391</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/RSRpcServices.html#L2392">2392</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/RSRpcServices.html#L2393">2393</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/RSRpcServices.html#L2394">2394</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 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2394">2394</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/RSRpcServices.html#L2395">2395</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/RSRpcServices.html#L2395">2395</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 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2396">2396</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' child have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2397">2397</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2397">2397</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' child have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2398">2398</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2398">2398</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' child have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2399">2399</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2399">2399</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' child have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2400">2400</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2400">2400</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' child have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2401">2401</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2401">2401</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' child have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2402">2402</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2402">2402</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2404">2404</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 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2405">2405</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2407">2407</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2408">2408</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' child have incorrect indentation level 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2409">2409</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 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2409">2409</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 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2411">2411</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 14, expected level should be 16.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2412">2412</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 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2414">2414</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 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2415">2415</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2416">2416</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 rcurly' have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2417">2417</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>'else' child have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2418">2418</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2418">2418</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>'else' child have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2419">2419</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>'else rcurly' have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2420">2420</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>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.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>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/RSRpcServices.html#L2422">2422</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>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2423">2423</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 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2423">2423</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>'block' child have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2424">2424</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 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2424">2424</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 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2425">2425</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2426">2426</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2426">2426</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2427">2427</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2427">2427</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2428">2428</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2428">2428</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2429">2429</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2429">2429</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2430">2430</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2430">2430</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2431">2431</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2431">2431</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2433">2433</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' child have incorrect indentation level 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2434">2434</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 rcurly' have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2436">2436</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2437">2437</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 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2438">2438</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 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2438">2438</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 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2440">2440</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' child have incorrect indentation level 14, expected level should be 16.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2441">2441</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 rcurly' have incorrect indentation level 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2443">2443</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' child have incorrect indentation level 12, expected level should be 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2444">2444</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 rcurly' have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2445">2445</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 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2446">2446</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>'else' child have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2447">2447</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 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2447">2447</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>'else' child have incorrect indentation level 10, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2448">2448</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>'else rcurly' have incorrect indentation level 8, expected level should be 10.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2449">2449</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/RSRpcServices.html#L2450">2450</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/RSRpcServices.html#L2451">2451</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/RSRpcServices.html#L2475">2475</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>MethodLength</td>
 <td>Method length is 414 lines (max allowed is 150).</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2477">2477</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>'catch rcurly' have incorrect indentation level 13, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2509">2509</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/RSRpcServices.html#L2831">2831</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>'catch' child have incorrect indentation level 11, expected level should be 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSRpcServices.html#L2882">2882</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>
@@ -60483,31 +60489,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RSStatusServlet.java">org/apache/hadoop/hbase/regionserver/RSStatusServlet.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>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RSStatusServlet.html#L50">50</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/RSStatusServlet.html#L52">52</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/RSStatusServlet.html#L54">54</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>
@@ -60516,367 +60522,367 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.Region.java">org/apache/hadoop/hbase/regionserver/Region.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 'com.google.common.annotations.VisibleForTesting' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Region.html#L52">52</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/Region.html#L121">121</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/Region.html#L129">129</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/Region.html#L135">135</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/Region.html#L137">137</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/Region.html#L152">152</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/Region.html#L244">244</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/Region.html#L255">255</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/Region.html#L261">261</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/Region.html#L303">303</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/Region.html#L304">304</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/Region.html#L305">305</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/Region.html#L307">307</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/Region.html#L316">316</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/Region.html#L317">317</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/Region.html#L320">320</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/Region.html#L328">328</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/Region.html#L331">331</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/Region.html#L344">344</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/Region.html#L345">345</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/Region.html#L346">346</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/Region.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>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/Region.html#L362">362</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/Region.html#L363">363</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/Region.html#L364">364</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/Region.html#L366">366</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/Region.html#L374">374</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/Region.html#L375">375</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/Region.html#L390">390</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/Region.html#L427">427</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/Region.html#L428">428</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/Region.html#L429">429</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/Region.html#L431">431</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/Region.html#L440">440</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/Region.html#L449">449</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/Region.html#L453">453</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/Region.html#L455">455</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/Region.html#L491">491</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/Region.html#L492">492</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/Region.html#L508">508</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/Region.html#L516">516</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/Region.html#L524">524</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/Region.html#L535">535</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/Region.html#L536">536</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/Region.html#L579">579</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/Region.html#L588">588</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/Region.html#L589">589</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/Region.html#L595">595</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/Region.html#L597">597</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/Region.html#L605">605</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/Region.html#L612">612</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/Region.html#L613">613</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/Region.html#L614">614</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/Region.html#L615">615</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/Region.html#L623">623</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/Region.html#L624">624</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/Region.html#L668">668</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/Region.html#L671">671</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/Region.html#L686">686</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>
@@ -60885,1249 +60891,1249 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.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.collect.ImmutableList' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#L32">32</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.conf.Configuration' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#L44">44</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>
 <td>Wrong order for 'org.apache.hadoop.hbase.regionserver.wal.WALEdit' import.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#L81">81</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/RegionCoprocessorHost.html#L326">326</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/RegionCoprocessorHost.html#L327">327</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/RegionCoprocessorHost.html#L328">328</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>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#L402">402</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#L402">402</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 131).</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#L531">531</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 modifier' have incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#L538">538</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 one of the following: 12, 14.</td>
 <td><a href="./xref/org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html#L541">541</a></td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 16bae6e..f8ccc2f 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 ServerManager serverManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private final boolean catalogJanitorEnabled;<a name="line.64"></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 String format;<a name="line.64"></a>
 <span class="sourceLineNo">065</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.65"></a>
 <span class="sourceLineNo">066</span>  private final AssignmentManager assignmentManager;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private final String format;<a name="line.67"></a>
+<span class="sourceLineNo">067</span>  private final List&lt;ServerName&gt; servers;<a name="line.67"></a>
 <span class="sourceLineNo">068</span>  private final String filter;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final ServerName metaLocation;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final List&lt;ServerName&gt; servers;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.71"></a>
+<span class="sourceLineNo">069</span>  private final ServerManager serverManager;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final ServerName metaLocation;<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,13 +106,13 @@
 <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.getServerManager__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.setServerManager(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.getCatalogJanitorEnabled__IsNotDefault())<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.107"></a>
+<span class="sourceLineNo">107</span>      p_implData.setFormat("html");<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    }<a name="line.108"></a>
 <span class="sourceLineNo">109</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    {<a name="line.110"></a>
@@ -122,25 +122,25 @@
 <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">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">117</span>    if(! p_implData.getServers__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">119</span>      p_implData.setServers(null);<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    }<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    {<a name="line.122"></a>
 <span class="sourceLineNo">123</span>      p_implData.setFilter("general");<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      p_implData.setMetaLocation(null);<a name="line.127"></a>
+<span class="sourceLineNo">127</span>      p_implData.setServerManager(null);<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.129"></a>
+<span class="sourceLineNo">129</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      p_implData.setServers(null);<a name="line.131"></a>
+<span class="sourceLineNo">131</span>      p_implData.setMetaLocation(null);<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    if(! p_implData.getFrags__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.setFrags(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>    serverManager = p_implData.getServerManager();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.144"></a>
+<span class="sourceLineNo">143</span>    frags = p_implData.getFrags();<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    format = p_implData.getFormat();<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    deadServers = p_implData.getDeadServers();<a name="line.145"></a>
 <span class="sourceLineNo">146</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    format = p_implData.getFormat();<a name="line.147"></a>
+<span class="sourceLineNo">147</span>    servers = p_implData.getServers();<a name="line.147"></a>
 <span class="sourceLineNo">148</span>    filter = p_implData.getFilter();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    metaLocation = p_implData.getMetaLocation();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    servers = p_implData.getServers();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    frags = p_implData.getFrags();<a name="line.151"></a>
+<span class="sourceLineNo">149</span>    serverManager = p_implData.getServerManager();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    metaLocation = p_implData.getMetaLocation();<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/f6cc9224/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 da81736..c2ab698 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,8 +33,8 @@
 <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 = "bcn", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "format", 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 = "bcn", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.30"></a>
 <span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></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>    // 23, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setBcn(String bcn)<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>      // 23, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_bcn = bcn;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_bcn__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 getBcn()<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_bcn;<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_bcn;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getBcn__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_bcn__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_bcn__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 22, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setFormat(String format)<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>    // 23, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcn(String bcn)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 22, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_format = format;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_format__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 23, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcn = bcn;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcn__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getFormat()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getBcn()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_format;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_bcn;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_format;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getFormat__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_bcn;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcn__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_format__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_bcn__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_format__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_bcn__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 24, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcv(String bcv)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></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 bcn;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<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()).setBcn(p_bcn);<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 format;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String bcn;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setFormat(p_format);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setBcn(p_bcn);<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 da81736..c2ab698 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,8 +33,8 @@
 <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 = "bcn", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "format", 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 = "bcn", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.30"></a>
 <span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></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>    // 23, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setBcn(String bcn)<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>      // 23, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_bcn = bcn;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_bcn__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 getBcn()<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_bcn;<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_bcn;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getBcn__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_bcn__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_bcn__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 22, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setFormat(String format)<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>    // 23, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcn(String bcn)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 22, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_format = format;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_format__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 23, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcn = bcn;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcn__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getFormat()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getBcn()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_format;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_bcn;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_format;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getFormat__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_bcn;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcn__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_format__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_bcn__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_format__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_bcn__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 24, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcv(String bcv)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></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 bcn;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<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()).setBcn(p_bcn);<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 format;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String bcn;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setFormat(p_format);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setBcn(p_bcn);<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 da81736..c2ab698 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,8 +33,8 @@
 <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 = "bcn", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "format", 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 = "bcn", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.30"></a>
 <span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></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>    // 23, 1<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    public void setBcn(String bcn)<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>      // 23, 1<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      m_bcn = bcn;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>      m_bcn__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 getBcn()<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_bcn;<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_bcn;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    public boolean getBcn__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_bcn__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_bcn__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 22, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setFormat(String format)<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>    // 23, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setBcn(String bcn)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 22, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_format = format;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_format__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 23, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_bcn = bcn;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_bcn__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getFormat()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getBcn()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_format;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_bcn;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_format;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getFormat__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_bcn;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getBcn__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_format__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_bcn__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_format__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_bcn__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 24, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcv(String bcv)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></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 bcn;<a name="line.151"></a>
-<span class="sourceLineNo">152</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<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()).setBcn(p_bcn);<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 format;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFormat(String p_format)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String bcn;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setFormat(p_format);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setBcn(p_bcn);<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 88f163f..ca565f0 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,19 +34,19 @@
 <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 bcn;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>  private final String format;<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 bcn;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>  private final String bcv;<a name="line.31"></a>
 <span class="sourceLineNo">032</span>  private final String filter;<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.getBcn__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.setBcn("");<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.getFormat__IsNotDefault())<a name="line.39"></a>
+<span class="sourceLineNo">039</span>    if(! p_implData.getBcn__IsNotDefault())<a name="line.39"></a>
 <span class="sourceLineNo">040</span>    {<a name="line.40"></a>
-<span class="sourceLineNo">041</span>      p_implData.setFormat("html");<a name="line.41"></a>
+<span class="sourceLineNo">041</span>      p_implData.setBcn("");<a name="line.41"></a>
 <span class="sourceLineNo">042</span>    }<a name="line.42"></a>
 <span class="sourceLineNo">043</span>    if(! p_implData.getBcv__IsNotDefault())<a name="line.43"></a>
 <span class="sourceLineNo">044</span>    {<a name="line.44"></a>
@@ -62,8 +62,8 @@
 <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>    bcn = p_implData.getBcn();<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    format = p_implData.getFormat();<a name="line.58"></a>
+<span class="sourceLineNo">057</span>    format = p_implData.getFormat();<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    bcn = p_implData.getBcn();<a name="line.58"></a>
 <span class="sourceLineNo">059</span>    bcv = p_implData.getBcv();<a name="line.59"></a>
 <span class="sourceLineNo">060</span>    filter = p_implData.getFilter();<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  }<a name="line.61"></a>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html
index 7720208..8d6bd83 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFileInfo.html
@@ -105,461 +105,473 @@
 <span class="sourceLineNo">097</span><a name="line.97"></a>
 <span class="sourceLineNo">098</span>  private RegionCoprocessorHost coprocessorHost;<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>   * Create a Store File Info<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @param conf the {@link Configuration} to use<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   * @param fs The current file system to use.<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @param initialPath The {@link Path} of the file<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public StoreFileInfo(final Configuration conf, final FileSystem fs, final Path initialPath)<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      throws IOException {<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    assert fs != null;<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    assert initialPath != null;<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    assert conf != null;<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>    this.fs = fs;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    this.conf = conf;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    this.initialPath = initialPath;<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    Path p = initialPath;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    if (HFileLink.isHFileLink(p)) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      // HFileLink<a name="line.117"></a>
-<span class="sourceLineNo">118</span>      this.reference = null;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      this.link = HFileLink.buildFromHFileLinkPattern(conf, p);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      if (LOG.isTraceEnabled()) LOG.trace(p + " is a link");<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    } else if (isReference(p)) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>      this.reference = Reference.read(fs, p);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      Path referencePath = getReferredToFile(p);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      if (HFileLink.isHFileLink(referencePath)) {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>        // HFileLink Reference<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        this.link = HFileLink.buildFromHFileLinkPattern(conf, referencePath);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      } else {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        // Reference<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        this.link = null;<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      }<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      if (LOG.isTraceEnabled()) LOG.trace(p + " is a " + reference.getFileRegion() +<a name="line.131"></a>
-<span class="sourceLineNo">132</span>              " reference to " + referencePath);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    } else if (isHFile(p)) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>      // HFile<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      this.reference = null;<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      this.link = null;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    } else {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      throw new IOException("path=" + p + " doesn't look like a valid StoreFile");<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    }<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  /**<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   * Create a Store File Info<a name="line.143"></a>
-<span class="sourceLineNo">144</span>   * @param conf the {@link Configuration} to use<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * @param fs The current file system to use.<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param fileStatus The {@link FileStatus} of the file<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  public StoreFileInfo(final Configuration conf, final FileSystem fs, final FileStatus fileStatus)<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      throws IOException {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    this(conf, fs, fileStatus.getPath());<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>  /**<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * Create a Store File Info from an HFileLink<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   * @param conf the {@link Configuration} to use<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * @param fs The current file system to use.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param fileStatus The {@link FileStatus} of the file<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public StoreFileInfo(final Configuration conf, final FileSystem fs, final FileStatus fileStatus,<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      final HFileLink link)<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      throws IOException {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    this.fs = fs;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    this.conf = conf;<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    // initialPath can be null only if we get a link.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    this.initialPath = (fileStatus == null) ? null : fileStatus.getPath();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      // HFileLink<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    this.reference = null;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    this.link = link;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * Create a Store File Info from an HFileLink<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   * @param conf<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param fs<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param fileStatus<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * @param reference<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @throws IOException<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  public StoreFileInfo(final Configuration conf, final FileSystem fs, final FileStatus fileStatus,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final Reference reference)<a name="line.180"></a>
-<span class="sourceLineNo">181</span>      throws IOException {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    this.fs = fs;<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    this.conf = conf;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    this.initialPath = fileStatus.getPath();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    this.reference = reference;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    this.link = null;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  }<a name="line.187"></a>
-<span class="sourceLineNo">188</span><a name="line.188"></a>
-<span class="sourceLineNo">189</span>  /**<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * Sets the region coprocessor env.<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param coprocessorHost<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  public void setRegionCoprocessorHost(RegionCoprocessorHost coprocessorHost) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    this.coprocessorHost = coprocessorHost;<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>  /*<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * @return the Reference object associated to this StoreFileInfo.<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   *         null if the StoreFile is not a reference.<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
-<span class="sourceLineNo">201</span>  public Reference getReference() {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    return this.reference;<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>  /** @return True if the store file is a Reference */<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  public boolean isReference() {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    return this.reference != null;<a name="line.207"></a>
+<span class="sourceLineNo">100</span>  // timestamp on when the file was created, is 0 and ignored for reference or link files<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private long createdTimestamp;<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>   * Create a Store File Info<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @param conf the {@link Configuration} to use<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * @param fs The current file system to use.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @param initialPath The {@link Path} of the file<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   */<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public StoreFileInfo(final Configuration conf, final FileSystem fs, final Path initialPath)<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      throws IOException {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    assert fs != null;<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    assert initialPath != null;<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    assert conf != null;<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>    this.fs = fs;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    this.conf = conf;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    this.initialPath = initialPath;<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    Path p = initialPath;<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    if (HFileLink.isHFileLink(p)) {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      // HFileLink<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      this.reference = null;<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      this.link = HFileLink.buildFromHFileLinkPattern(conf, p);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      if (LOG.isTraceEnabled()) LOG.trace(p + " is a link");<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    } else if (isReference(p)) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      this.reference = Reference.read(fs, p);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      Path referencePath = getReferredToFile(p);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      if (HFileLink.isHFileLink(referencePath)) {<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        // HFileLink Reference<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        this.link = HFileLink.buildFromHFileLinkPattern(conf, referencePath);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      } else {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        // Reference<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        this.link = null;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      }<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      if (LOG.isTraceEnabled()) LOG.trace(p + " is a " + reference.getFileRegion() +<a name="line.134"></a>
+<span class="sourceLineNo">135</span>              " reference to " + referencePath);<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    } else if (isHFile(p)) {<a name="line.136"></a>
+<span class="sourceLineNo">137</span>      // HFile<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      this.createdTimestamp = fs.getFileStatus(initialPath).getModificationTime();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      this.reference = null;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      this.link = null;<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    } else {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      throw new IOException("path=" + p + " doesn't look like a valid StoreFile");<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><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  /**<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * Create a Store File Info<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @param conf the {@link Configuration} to use<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @param fs The current file system to use.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * @param fileStatus The {@link FileStatus} of the file<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  public StoreFileInfo(final Configuration conf, final FileSystem fs, final FileStatus fileStatus)<a name="line.152"></a>
+<span class="sourceLineNo">153</span>      throws IOException {<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    this(conf, fs, fileStatus.getPath());<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  }<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>   * Create a Store File Info from an HFileLink<a name="line.158"></a>
+<span class="sourceLineNo">159</span>   * @param conf the {@link Configuration} to use<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * @param fs The current file system to use.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * @param fileStatus The {@link FileStatus} of the file<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public StoreFileInfo(final Configuration conf, final FileSystem fs, final FileStatus fileStatus,<a name="line.163"></a>
+<span class="sourceLineNo">164</span>      final HFileLink link)<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      throws IOException {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    this.fs = fs;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.conf = conf;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    // initialPath can be null only if we get a link.<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    this.initialPath = (fileStatus == null) ? null : fileStatus.getPath();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      // HFileLink<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    this.reference = null;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    this.link = link;<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>   * Create a Store File Info from an HFileLink<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * @param conf<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @param fs<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   * @param fileStatus<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * @param reference<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * @throws IOException<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   */<a name="line.182"></a>
+<span class="sourceLineNo">183</span>  public StoreFileInfo(final Configuration conf, final FileSystem fs, final FileStatus fileStatus,<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      final Reference reference)<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    this.fs = fs;<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    this.conf = conf;<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    this.initialPath = fileStatus.getPath();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.createdTimestamp = fileStatus.getModificationTime();<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    this.reference = reference;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.link = null;<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>   * Sets the region coprocessor env.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * @param coprocessorHost<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   */<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public void setRegionCoprocessorHost(RegionCoprocessorHost coprocessorHost) {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    this.coprocessorHost = coprocessorHost;<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>   * @return the Reference object associated to this StoreFileInfo.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   *         null if the StoreFile is not a reference.<a name="line.204"></a>
+<span class="sourceLineNo">205</span>   */<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  public Reference getReference() {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    return this.reference;<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 True if the store file is a top Reference */<a name="line.210"></a>
-<span class="sourceLineNo">211</span>  public boolean isTopReference() {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    return this.reference != null &amp;&amp; Reference.isTopFileRegion(this.reference.getFileRegion());<a name="line.212"></a>
+<span class="sourceLineNo">210</span>  /** @return True if the store file is a Reference */<a name="line.210"></a>
+<span class="sourceLineNo">211</span>  public boolean isReference() {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    return this.reference != null;<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>  /** @return True if the store file is a link */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>  public boolean isLink() {<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    return this.link != null &amp;&amp; this.reference == null;<a name="line.217"></a>
+<span class="sourceLineNo">215</span>  /** @return True if the store file is a top Reference */<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  public boolean isTopReference() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    return this.reference != null &amp;&amp; Reference.isTopFileRegion(this.reference.getFileRegion());<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>  /** @return the HDFS block distribution */<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    return this.hdfsBlocksDistribution;<a name="line.222"></a>
+<span class="sourceLineNo">220</span>  /** @return True if the store file is a link */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  public boolean isLink() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    return this.link != null &amp;&amp; this.reference == null;<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>   * Open a Reader for the StoreFile<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param fs The current file system to use.<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @param cacheConf The cache configuration and block cache reference.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @return The StoreFile.Reader for the file<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  public StoreFile.Reader open(final FileSystem fs,<a name="line.231"></a>
-<span class="sourceLineNo">232</span>      final CacheConfig cacheConf, final boolean canUseDropBehind) throws IOException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    FSDataInputStreamWrapper in;<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    FileStatus status;<a name="line.234"></a>
-<span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    final boolean doDropBehind = canUseDropBehind &amp;&amp; cacheConf.shouldDropBehindCompaction();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    if (this.link != null) {<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      // HFileLink<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      in = new FSDataInputStreamWrapper(fs, this.link, doDropBehind);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      status = this.link.getFileStatus(fs);<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    } else if (this.reference != null) {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      // HFile Reference<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      Path referencePath = getReferredToFile(this.getPath());<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      in = new FSDataInputStreamWrapper(fs, referencePath,<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          doDropBehind);<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      status = fs.getFileStatus(referencePath);<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    } else {<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      in = new FSDataInputStreamWrapper(fs, this.getPath(),<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          doDropBehind);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      status = fs.getFileStatus(initialPath);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    long length = status.getLen();<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    hdfsBlocksDistribution = computeHDFSBlocksDistribution(fs);<a name="line.253"></a>
-<span class="sourceLineNo">254</span><a name="line.254"></a>
-<span class="sourceLineNo">255</span>    StoreFile.Reader reader = null;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    if (this.coprocessorHost != null) {<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      reader = this.coprocessorHost.preStoreFileReaderOpen(fs, this.getPath(), in, length,<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        cacheConf, reference);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (reader == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      if (this.reference != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        reader = new HalfStoreFileReader(fs, this.getPath(), in, length, cacheConf, reference,<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          conf);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>      } else {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>        reader = new StoreFile.Reader(fs, status.getPath(), in, length, cacheConf, conf);<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>    if (this.coprocessorHost != null) {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      reader = this.coprocessorHost.postStoreFileReaderOpen(fs, this.getPath(), in, length,<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        cacheConf, reference, reader);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return reader;<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>  /**<a name="line.275"></a>
-<span class="sourceLineNo">276</span>   * Compute the HDFS Block Distribution for this StoreFile<a name="line.276"></a>
-<span class="sourceLineNo">277</span>   */<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  public HDFSBlocksDistribution computeHDFSBlocksDistribution(final FileSystem fs)<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      throws IOException {<a name="line.279"></a>
-<span class="sourceLineNo">280</span><a name="line.280"></a>
-<span class="sourceLineNo">281</span>    // guard against the case where we get the FileStatus from link, but by the time we<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    // call compute the file is moved again<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    if (this.link != null) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      FileNotFoundException exToThrow = null;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      for (int i = 0; i &lt; this.link.getLocations().length; i++) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        try {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>          return computeHDFSBlocksDistributionInternal(fs);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        } catch (FileNotFoundException ex) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          // try the other location<a name="line.289"></a>
-<span class="sourceLineNo">290</span>          exToThrow = ex;<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>      throw exToThrow;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    } else {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      return computeHDFSBlocksDistributionInternal(fs);<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>  private HDFSBlocksDistribution computeHDFSBlocksDistributionInternal(final FileSystem fs)<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      throws IOException {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>    FileStatus status = getReferencedFileStatus(fs);<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (this.reference != null) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      return computeRefFileHDFSBlockDistribution(fs, reference, status);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    } else {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      return FSUtils.computeHDFSBlocksDistribution(fs, status, 0, status.getLen());<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><a name="line.308"></a>
-<span class="sourceLineNo">309</span>  /**<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * Get the {@link FileStatus} of the file referenced by this StoreFileInfo<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @param fs The current file system to use.<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * @return The {@link FileStatus} of the file referenced by this StoreFileInfo<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  public FileStatus getReferencedFileStatus(final FileSystem fs) throws IOException {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>    FileStatus status;<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    if (this.reference != null) {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      if (this.link != null) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        FileNotFoundException exToThrow = null;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>        for (int i = 0; i &lt; this.link.getLocations().length; i++) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>          // HFileLink Reference<a name="line.320"></a>
-<span class="sourceLineNo">321</span>          try {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>            return link.getFileStatus(fs);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>          } catch (FileNotFoundException ex) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>            // try the other location<a name="line.324"></a>
-<span class="sourceLineNo">325</span>            exToThrow = ex;<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>        throw exToThrow;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>      } else {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // HFile Reference<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        Path referencePath = getReferredToFile(this.getPath());<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        status = fs.getFileStatus(referencePath);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    } else {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      if (this.link != null) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        FileNotFoundException exToThrow = null;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        for (int i = 0; i &lt; this.link.getLocations().length; i++) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>          // HFileLink<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          try {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            return link.getFileStatus(fs);<a name="line.340"></a>
-<span class="sourceLineNo">341</span>          } catch (FileNotFoundException ex) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>            // try the other location<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            exToThrow = ex;<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>        throw exToThrow;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      } else {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        status = fs.getFileStatus(initialPath);<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>    return status;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>  }<a name="line.352"></a>
-<span class="sourceLineNo">353</span><a name="line.353"></a>
-<span class="sourceLineNo">354</span>  /** @return The {@link Path} of the file */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public Path getPath() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    return initialPath;<a name="line.356"></a>
+<span class="sourceLineNo">225</span>  /** @return the HDFS block distribution */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    return this.hdfsBlocksDistribution;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  }<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * Open a Reader for the StoreFile<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param fs The current file system to use.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @param cacheConf The cache configuration and block cache reference.<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @return The StoreFile.Reader for the file<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  public StoreFile.Reader open(final FileSystem fs,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      final CacheConfig cacheConf, final boolean canUseDropBehind) throws IOException {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    FSDataInputStreamWrapper in;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    FileStatus status;<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>    final boolean doDropBehind = canUseDropBehind &amp;&amp; cacheConf.shouldDropBehindCompaction();<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    if (this.link != null) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      // HFileLink<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      in = new FSDataInputStreamWrapper(fs, this.link, doDropBehind);<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      status = this.link.getFileStatus(fs);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    } else if (this.reference != null) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      // HFile Reference<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      Path referencePath = getReferredToFile(this.getPath());<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      in = new FSDataInputStreamWrapper(fs, referencePath,<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          doDropBehind);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      status = fs.getFileStatus(referencePath);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    } else {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>      in = new FSDataInputStreamWrapper(fs, this.getPath(),<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          doDropBehind);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      status = fs.getFileStatus(initialPath);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    long length = status.getLen();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    hdfsBlocksDistribution = computeHDFSBlocksDistribution(fs);<a name="line.258"></a>
+<span class="sourceLineNo">259</span><a name="line.259"></a>
+<span class="sourceLineNo">260</span>    StoreFile.Reader reader = null;<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    if (this.coprocessorHost != null) {<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      reader = this.coprocessorHost.preStoreFileReaderOpen(fs, this.getPath(), in, length,<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        cacheConf, reference);<a name="line.263"></a>
+<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    if (reader == null) {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      if (this.reference != null) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        reader = new HalfStoreFileReader(fs, this.getPath(), in, length, cacheConf, reference,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>          conf);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      } else {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        reader = new StoreFile.Reader(fs, status.getPath(), in, length, cacheConf, conf);<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>    if (this.coprocessorHost != null) {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      reader = this.coprocessorHost.postStoreFileReaderOpen(fs, this.getPath(), in, length,<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        cacheConf, reference, reader);<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    return reader;<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>  /**<a name="line.280"></a>
+<span class="sourceLineNo">281</span>   * Compute the HDFS Block Distribution for this StoreFile<a name="line.281"></a>
+<span class="sourceLineNo">282</span>   */<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public HDFSBlocksDistribution computeHDFSBlocksDistribution(final FileSystem fs)<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      throws IOException {<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    // guard against the case where we get the FileStatus from link, but by the time we<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    // call compute the file is moved again<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    if (this.link != null) {<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      FileNotFoundException exToThrow = null;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      for (int i = 0; i &lt; this.link.getLocations().length; i++) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        try {<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          return computeHDFSBlocksDistributionInternal(fs);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        } catch (FileNotFoundException ex) {<a name="line.293"></a>
+<span class="sourceLineNo">294</span>          // try the other location<a name="line.294"></a>
+<span class="sourceLineNo">295</span>          exToThrow = ex;<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>      throw exToThrow;<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    } else {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return computeHDFSBlocksDistributionInternal(fs);<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><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  private HDFSBlocksDistribution computeHDFSBlocksDistributionInternal(final FileSystem fs)<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      throws IOException {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    FileStatus status = getReferencedFileStatus(fs);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    if (this.reference != null) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      return computeRefFileHDFSBlockDistribution(fs, reference, status);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    } else {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      return FSUtils.computeHDFSBlocksDistribution(fs, status, 0, status.getLen());<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>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * Get the {@link FileStatus} of the file referenced by this StoreFileInfo<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * @param fs The current file system to use.<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * @return The {@link FileStatus} of the file referenced by this StoreFileInfo<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  public FileStatus getReferencedFileStatus(final FileSystem fs) throws IOException {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    FileStatus status;<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    if (this.reference != null) {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      if (this.link != null) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        FileNotFoundException exToThrow = null;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        for (int i = 0; i &lt; this.link.getLocations().length; i++) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>          // HFileLink Reference<a name="line.325"></a>
+<span class="sourceLineNo">326</span>          try {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>            return link.getFileStatus(fs);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>          } catch (FileNotFoundException ex) {<a name="line.328"></a>
+<span class="sourceLineNo">329</span>            // try the other location<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            exToThrow = ex;<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>        throw exToThrow;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      } else {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        // HFile Reference<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        Path referencePath = getReferredToFile(this.getPath());<a name="line.336"></a>
+<span class="sourceLineNo">337</span>        status = fs.getFileStatus(referencePath);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>      }<a name="line.338"></a>
+<span class="sourceLineNo">339</span>    } else {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      if (this.link != null) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        FileNotFoundException exToThrow = null;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>        for (int i = 0; i &lt; this.link.getLocations().length; i++) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>          // HFileLink<a name="line.343"></a>
+<span class="sourceLineNo">344</span>          try {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>            return link.getFileStatus(fs);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>          } catch (FileNotFoundException ex) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>            // try the other location<a name="line.347"></a>
+<span class="sourceLineNo">348</span>            exToThrow = ex;<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>        throw exToThrow;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      } else {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>        status = fs.getFileStatus(initialPath);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      }<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return status;<a name="line.356"></a>
 <span class="sourceLineNo">357</span>  }<a name="line.357"></a>
 <span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  /** @return The {@link FileStatus} of the file */<a name="line.359"></a>
-<span class="sourceLineNo">360</span>  public FileStatus getFileStatus() throws IOException {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    return getReferencedFileStatus(fs);<a name="line.361"></a>
+<span class="sourceLineNo">359</span>  /** @return The {@link Path} of the file */<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  public Path getPath() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    return initialPath;<a name="line.361"></a>
 <span class="sourceLineNo">362</span>  }<a name="line.362"></a>
 <span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  /** @return Get the modification time of the file. */<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  public long getModificationTime() throws IOException {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    return getFileStatus().getModificationTime();<a name="line.366"></a>
+<span class="sourceLineNo">364</span>  /** @return The {@link FileStatus} of the file */<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  public FileStatus getFileStatus() throws IOException {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    return getReferencedFileStatus(fs);<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>  @Override<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public String toString() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    return this.getPath() +<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      (isReference() ? "-" + getReferredToFile(this.getPath()) + "-" + reference : "");<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>  /**<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * @param path Path to check.<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   * @return True if the path has format of a HFile.<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  public static boolean isHFile(final Path path) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return isHFile(path.getName());<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public static boolean isHFile(final String fileName) {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    Matcher m = HFILE_NAME_PATTERN.matcher(fileName);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return m.matches() &amp;&amp; m.groupCount() &gt; 0;<a name="line.385"></a>
+<span class="sourceLineNo">369</span>  /** @return Get the modification time of the file. */<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  public long getModificationTime() throws IOException {<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    return getFileStatus().getModificationTime();<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  }<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>  @Override<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  public String toString() {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    return this.getPath() +<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      (isReference() ? "-" + getReferredToFile(this.getPath()) + "-" + reference : "");<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  }<a name="line.378"></a>
+<span class="sourceLineNo">379</span><a name="line.379"></a>
+<span class="sourceLineNo">380</span>  /**<a name="line.380"></a>
+<span class="sourceLineNo">381</span>   * @param path Path to check.<a name="line.381"></a>
+<span class="sourceLineNo">382</span>   * @return True if the path has format of a HFile.<a name="line.382"></a>
+<span class="sourceLineNo">383</span>   */<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  public static boolean isHFile(final Path path) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    return isHFile(path.getName());<a name="line.385"></a>
 <span class="sourceLineNo">386</span>  }<a name="line.386"></a>
 <span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  /**<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param path Path to check.<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @return True if the path has format of a del file.<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   */<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public static boolean isDelFile(final Path path) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return isDelFile(path.getName());<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>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * @param fileName Sting version of path to validate.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   * @return True if the file name has format of a del file.<a name="line.398"></a>
-<span class="sourceLineNo">399</span>   */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>  public static boolean isDelFile(final String fileName) {<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    Matcher m = DELFILE_NAME_PATTERN.matcher(fileName);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    return m.matches() &amp;&amp; m.groupCount() &gt; 0;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  }<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>   * @param path Path to check.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   * @return True if the path has format of a HStoreFile reference.<a name="line.407"></a>
-<span class="sourceLineNo">408</span>   */<a name="line.408"></a>
-<span class="sourceLineNo">409</span>  public static boolean isReference(final Path path) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    return isReference(path.getName());<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<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>   * @param name file name to check.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @return True if the path has format of a HStoreFile reference.<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   */<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  public static boolean isReference(final String name) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Matcher m = REF_NAME_PATTERN.matcher(name);<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    return m.matches() &amp;&amp; m.groupCount() &gt; 1;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  }<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>  /*<a name="line.422"></a>
-<span class="sourceLineNo">423</span>   * Return path to the file referred to by a Reference.  Presumes a directory<a name="line.423"></a>
-<span class="sourceLineNo">424</span>   * hierarchy of &lt;code&gt;${hbase.rootdir}/data/${namespace}/tablename/regionname/familyname&lt;/code&gt;.<a name="line.424"></a>
-<span class="sourceLineNo">425</span>   * @param p Path to a Reference file.<a name="line.425"></a>
-<span class="sourceLineNo">426</span>   * @return Calculated path to parent region file.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>   * @throws IllegalArgumentException when path regex fails to match.<a name="line.427"></a>
-<span class="sourceLineNo">428</span>   */<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  public static Path getReferredToFile(final Path p) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    Matcher m = REF_NAME_PATTERN.matcher(p.getName());<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (m == null || !m.matches()) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      LOG.warn("Failed match of store file name " + p.toString());<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      throw new IllegalArgumentException("Failed match of store file name " +<a name="line.433"></a>
-<span class="sourceLineNo">434</span>          p.toString());<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    }<a name="line.435"></a>
-<span class="sourceLineNo">436</span><a name="line.436"></a>
-<span class="sourceLineNo">437</span>    // Other region name is suffix on the passed Reference file name<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    String otherRegion = m.group(2);<a name="line.438"></a>
-<span class="sourceLineNo">439</span>    // Tabledir is up two directories from where Reference was written.<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    Path tableDir = p.getParent().getParent().getParent();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    String nameStrippedOfSuffix = m.group(1);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    if (LOG.isDebugEnabled()) {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      LOG.debug("reference '" + p + "' to region=" + otherRegion<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        + " hfile=" + nameStrippedOfSuffix);<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>    // Build up new path with the referenced region in place of our current<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    // region in the reference path.  Also strip regionname suffix from name.<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    return new Path(new Path(new Path(tableDir, otherRegion),<a name="line.449"></a>
-<span class="sourceLineNo">450</span>      p.getParent().getName()), nameStrippedOfSuffix);<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  }<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>   * Validate the store file name.<a name="line.454"></a>
-<span class="sourceLineNo">455</span>   * @param fileName name of the file to validate<a name="line.455"></a>
-<span class="sourceLineNo">456</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the file could be a valid store file, &lt;tt&gt;false&lt;/tt&gt; otherwise<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   */<a name="line.457"></a>
-<span class="sourceLineNo">458</span>  public static boolean validateStoreFileName(final String fileName) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (HFileLink.isHFileLink(fileName) || isReference(fileName))<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      return(true);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    return !fileName.contains("-");<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>  /**<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   * Return if the specified file is a valid store file or not.<a name="line.465"></a>
-<span class="sourceLineNo">466</span>   * @param fileStatus The {@link FileStatus} of the file<a name="line.466"></a>
-<span class="sourceLineNo">467</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the file is valid<a name="line.467"></a>
-<span class="sourceLineNo">468</span>   */<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  public static boolean isValid(final FileStatus fileStatus)<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      throws IOException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    final Path p = fileStatus.getPath();<a name="line.471"></a>
-<span class="sourceLineNo">472</span><a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (fileStatus.isDirectory())<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      return false;<a name="line.474"></a>
+<span class="sourceLineNo">388</span>  public static boolean isHFile(final String fileName) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    Matcher m = HFILE_NAME_PATTERN.matcher(fileName);<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    return m.matches() &amp;&amp; m.groupCount() &gt; 0;<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  }<a name="line.391"></a>
+<span class="sourceLineNo">392</span><a name="line.392"></a>
+<span class="sourceLineNo">393</span>  /**<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param path Path to check.<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @return True if the path has format of a del file.<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  public static boolean isDelFile(final Path path) {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    return isDelFile(path.getName());<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>   * @param fileName Sting version of path to validate.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   * @return True if the file name has format of a del file.<a name="line.403"></a>
+<span class="sourceLineNo">404</span>   */<a name="line.404"></a>
+<span class="sourceLineNo">405</span>  public static boolean isDelFile(final String fileName) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    Matcher m = DELFILE_NAME_PATTERN.matcher(fileName);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    return m.matches() &amp;&amp; m.groupCount() &gt; 0;<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 path Path to check.<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return True if the path has format of a HStoreFile reference.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public static boolean isReference(final Path path) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    return isReference(path.getName());<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 name file name to check.<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * @return True if the path has format of a HStoreFile reference.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   */<a name="line.421"></a>
+<span class="sourceLineNo">422</span>  public static boolean isReference(final String name) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    Matcher m = REF_NAME_PATTERN.matcher(name);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    return m.matches() &amp;&amp; m.groupCount() &gt; 1;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  }<a name="line.425"></a>
+<span class="sourceLineNo">426</span><a name="line.426"></a>
+<span class="sourceLineNo">427</span>  /**<a name="line.427"></a>
+<span class="sourceLineNo">428</span>   * @return timestamp when this file was created (as returned by filesystem)<a name="line.428"></a>
+<span class="sourceLineNo">429</span>   */<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  public long getCreatedTimestamp() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    return createdTimestamp;<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>  /*<a name="line.434"></a>
+<span class="sourceLineNo">435</span>   * Return path to the file referred to by a Reference.  Presumes a directory<a name="line.435"></a>
+<span class="sourceLineNo">436</span>   * hierarchy of &lt;code&gt;${hbase.rootdir}/data/${namespace}/tablename/regionname/familyname&lt;/code&gt;.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>   * @param p Path to a Reference file.<a name="line.437"></a>
+<span class="sourceLineNo">438</span>   * @return Calculated path to parent region file.<a name="line.438"></a>
+<span class="sourceLineNo">439</span>   * @throws IllegalArgumentException when path regex fails to match.<a name="line.439"></a>
+<span class="sourceLineNo">440</span>   */<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  public static Path getReferredToFile(final Path p) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    Matcher m = REF_NAME_PATTERN.matcher(p.getName());<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    if (m == null || !m.matches()) {<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      LOG.warn("Failed match of store file name " + p.toString());<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      throw new IllegalArgumentException("Failed match of store file name " +<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          p.toString());<a name="line.446"></a>
+<span class="sourceLineNo">447</span>    }<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>    // Other region name is suffix on the passed Reference file name<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    String otherRegion = m.group(2);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    // Tabledir is up two directories from where Reference was written.<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    Path tableDir = p.getParent().getParent().getParent();<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    String nameStrippedOfSuffix = m.group(1);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>    if (LOG.isDebugEnabled()) {<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      LOG.debug("reference '" + p + "' to region=" + otherRegion<a name="line.455"></a>
+<span class="sourceLineNo">456</span>        + " hfile=" + nameStrippedOfSuffix);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    // Build up new path with the referenced region in place of our current<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    // region in the reference path.  Also strip regionname suffix from name.<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    return new Path(new Path(new Path(tableDir, otherRegion),<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      p.getParent().getName()), nameStrippedOfSuffix);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  }<a name="line.463"></a>
+<span class="sourceLineNo">464</span><a name="line.464"></a>
+<span class="sourceLineNo">465</span>  /**<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   * Validate the store file name.<a name="line.466"></a>
+<span class="sourceLineNo">467</span>   * @param fileName name of the file to validate<a name="line.467"></a>
+<span class="sourceLineNo">468</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the file could be a valid store file, &lt;tt&gt;false&lt;/tt&gt; otherwise<a name="line.468"></a>
+<span class="sourceLineNo">469</span>   */<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public static boolean validateStoreFileName(final String fileName) {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    if (HFileLink.isHFileLink(fileName) || isReference(fileName))<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      return(true);<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    return !fileName.contains("-");<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
 <span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>    // Check for empty hfile. Should never be the case but can happen<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    // after data loss in hdfs for whatever reason (upgrade, etc.): HBASE-646<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    // NOTE: that the HFileLink is just a name, so it's an empty file.<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    if (!HFileLink.isHFileLink(p) &amp;&amp; fileStatus.getLen() &lt;= 0) {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      LOG.warn("Skipping " + p + " because it is empty. HBASE-646 DATA LOSS?");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      return false;<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>    return validateStoreFileName(p.getName());<a name="line.484"></a>
-<span class="sourceLineNo">485</span>  }<a name="line.485"></a>
-<span class="sourceLineNo">486</span><a name="line.486"></a>
-<span class="sourceLineNo">487</span>  /**<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   * helper function to compute HDFS blocks distribution of a given reference<a name="line.488"></a>
-<span class="sourceLineNo">489</span>   * file.For reference file, we don't compute the exact value. We use some<a name="line.489"></a>
-<span class="sourceLineNo">490</span>   * estimate instead given it might be good enough. we assume bottom part<a name="line.490"></a>
-<span class="sourceLineNo">491</span>   * takes the first half of reference file, top part takes the second half<a name="line.491"></a>
-<span class="sourceLineNo">492</span>   * of the reference file. This is just estimate, given<a name="line.492"></a>
-<span class="sourceLineNo">493</span>   * midkey ofregion != midkey of HFile, also the number and size of keys vary.<a name="line.493"></a>
-<span class="sourceLineNo">494</span>   * If this estimate isn't good enough, we can improve it later.<a name="line.494"></a>
-<span class="sourceLineNo">495</span>   * @param fs  The FileSystem<a name="line.495"></a>
-<span class="sourceLineNo">496</span>   * @param reference  The reference<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * @param status  The reference FileStatus<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * @return HDFS blocks distribution<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   */<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  private static HDFSBlocksDistribution computeRefFileHDFSBlockDistribution(<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      final FileSystem fs, final Reference reference, final FileStatus status)<a name="line.501"></a>
-<span class="sourceLineNo">502</span>      throws IOException {<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    if (status == null) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      return null;<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>    long start = 0;<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    long length = 0;<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>    if (Reference.isTopFileRegion(reference.getFileRegion())) {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      start = status.getLen()/2;<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      length = status.getLen() - status.getLen()/2;<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } else {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      start = 0;<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      length = status.getLen()/2;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    return FSUtils.computeHDFSBlocksDistribution(fs, status, start, length);<a name="line.517"></a>
-<span class="sourceLineNo">518</span>  }<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>  @Override<a name="line.520"></a>
-<span class="sourceLineNo">521</span>  public boolean equals(Object that) {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>    if (this == that) return true;<a name="line.522"></a>
-<span class="sourceLineNo">523</span>    if (that == null) return false;<a name="line.523"></a>
-<span class="sourceLineNo">524</span><a name="line.524"></a>
-<span class="sourceLineNo">525</span>    if (!(that instanceof StoreFileInfo)) return false;<a name="line.525"></a>
-<span class="sourceLineNo">526</span><a name="line.526"></a>
-<span class="sourceLineNo">527</span>    StoreFileInfo o = (StoreFileInfo)that;<a name="line.527"></a>
-<span class="sourceLineNo">528</span>    if (initialPath != null &amp;&amp; o.initialPath == null) return false;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>    if (initialPath == null &amp;&amp; o.initialPath != null) return false;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    if (initialPath != o.initialPath &amp;&amp; initialPath != null<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            &amp;&amp; !initialPath.equals(o.initialPath)) return false;<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>    if (reference != null &amp;&amp; o.reference == null) return false;<a name="line.533"></a>
-<span class="sourceLineNo">534</span>    if (reference == null &amp;&amp; o.reference != null) return false;<a name="line.534"></a>
-<span class="sourceLineNo">535</span>    if (reference != o.reference &amp;&amp; reference != null<a name="line.535"></a>
-<span class="sourceLineNo">536</span>            &amp;&amp; !reference.equals(o.reference)) return false;<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    if (link != null &amp;&amp; o.link == null) return false;<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    if (link == null &amp;&amp; o.link != null) return false;<a name="line.539"></a>
-<span class="sourceLineNo">540</span>    if (link != o.link &amp;&amp; link != null &amp;&amp; !link.equals(o.link)) return false;<a name="line.540"></a>
-<span class="sourceLineNo">541</span><a name="line.541"></a>
-<span class="sourceLineNo">542</span>    return true;<a name="line.542"></a>
-<span class="sourceLineNo">543</span>  };<a name="line.543"></a>
+<span class="sourceLineNo">476</span>  /**<a name="line.476"></a>
+<span class="sourceLineNo">477</span>   * Return if the specified file is a valid store file or not.<a name="line.477"></a>
+<span class="sourceLineNo">478</span>   * @param fileStatus The {@link FileStatus} of the file<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   * @return &lt;tt&gt;true&lt;/tt&gt; if the file is valid<a name="line.479"></a>
+<span class="sourceLineNo">480</span>   */<a name="line.480"></a>
+<span class="sourceLineNo">481</span>  public static boolean isValid(final FileStatus fileStatus)<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      throws IOException {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>    final Path p = fileStatus.getPath();<a name="line.483"></a>
+<span class="sourceLineNo">484</span><a name="line.484"></a>
+<span class="sourceLineNo">485</span>    if (fileStatus.isDirectory())<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      return false;<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>    // Check for empty hfile. Should never be the case but can happen<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    // after data loss in hdfs for whatever reason (upgrade, etc.): HBASE-646<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    // NOTE: that the HFileLink is just a name, so it's an empty file.<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    if (!HFileLink.isHFileLink(p) &amp;&amp; fileStatus.getLen() &lt;= 0) {<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      LOG.warn("Skipping " + p + " because it is empty. HBASE-646 DATA LOSS?");<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      return false;<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>    return validateStoreFileName(p.getName());<a name="line.496"></a>
+<span class="sourceLineNo">497</span>  }<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>   * helper function to compute HDFS blocks distribution of a given reference<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * file.For reference file, we don't compute the exact value. We use some<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * estimate instead given it might be good enough. we assume bottom part<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * takes the first half of reference file, top part takes the second half<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   * of the reference file. This is just estimate, given<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   * midkey ofregion != midkey of HFile, also the number and size of keys vary.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>   * If this estimate isn't good enough, we can improve it later.<a name="line.506"></a>
+<span class="sourceLineNo">507</span>   * @param fs  The FileSystem<a name="line.507"></a>
+<span class="sourceLineNo">508</span>   * @param reference  The reference<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * @param status  The reference FileStatus<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * @return HDFS blocks distribution<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   */<a name="line.511"></a>
+<span class="sourceLineNo">512</span>  private static HDFSBlocksDistribution computeRefFileHDFSBlockDistribution(<a name="line.512"></a>
+<span class="sourceLineNo">513</span>      final FileSystem fs, final Reference reference, final FileStatus status)<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      throws IOException {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (status == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      return null;<a name="line.516"></a>
+<span class="sourceLineNo">517</span>    }<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>    long start = 0;<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    long length = 0;<a name="line.520"></a>
+<span class="sourceLineNo">521</span><a name="line.521"></a>
+<span class="sourceLineNo">522</span>    if (Reference.isTopFileRegion(reference.getFileRegion())) {<a name="line.522"></a>
+<span class="sourceLineNo">523</span>      start = status.getLen()/2;<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      length = status.getLen() - status.getLen()/2;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    } else {<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      start = 0;<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      length = status.getLen()/2;<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    }<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    return FSUtils.computeHDFSBlocksDistribution(fs, status, start, length);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  }<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>  @Override<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  public boolean equals(Object that) {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    if (this == that) return true;<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    if (that == null) return false;<a name="line.535"></a>
+<span class="sourceLineNo">536</span><a name="line.536"></a>
+<span class="sourceLineNo">537</span>    if (!(that instanceof StoreFileInfo)) return false;<a name="line.537"></a>
+<span class="sourceLineNo">538</span><a name="line.538"></a>
+<span class="sourceLineNo">539</span>    StoreFileInfo o = (StoreFileInfo)that;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (initialPath != null &amp;&amp; o.initialPath == null) return false;<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    if (initialPath == null &amp;&amp; o.initialPath != null) return false;<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    if (initialPath != o.initialPath &amp;&amp; initialPath != null<a name="line.542"></a>
+<span class="sourceLineNo">543</span>            &amp;&amp; !initialPath.equals(o.initialPath)) return false;<a name="line.543"></a>
 <span class="sourceLineNo">544</span><a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>  @Override<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  public int hashCode() {<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    int hash = 17;<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    hash = hash * 31 + ((reference == null) ? 0 : reference.hashCode());<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    hash = hash * 31 + ((initialPath ==  null) ? 0 : initialPath.hashCode());<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    hash = hash * 31 + ((link == null) ? 0 : link.hashCode());<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return  hash;<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">545</span>    if (reference != null &amp;&amp; o.reference == null) return false;<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    if (reference == null &amp;&amp; o.reference != null) return false;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    if (reference != o.reference &amp;&amp; reference != null<a name="line.547"></a>
+<span class="sourceLineNo">548</span>            &amp;&amp; !reference.equals(o.reference)) return false;<a name="line.548"></a>
+<span class="sourceLineNo">549</span><a name="line.549"></a>
+<span class="sourceLineNo">550</span>    if (link != null &amp;&amp; o.link == null) return false;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    if (link == null &amp;&amp; o.link != null) return false;<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    if (link != o.link &amp;&amp; link != null &amp;&amp; !link.equals(o.link)) return false;<a name="line.552"></a>
+<span class="sourceLineNo">553</span><a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return true;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  };<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  @Override<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  public int hashCode() {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    int hash = 17;<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    hash = hash * 31 + ((reference == null) ? 0 : reference.hashCode());<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    hash = hash * 31 + ((initialPath ==  null) ? 0 : initialPath.hashCode());<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    hash = hash * 31 + ((link == null) ? 0 : link.hashCode());<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    return  hash;<a name="line.564"></a>
+<span class="sourceLineNo">565</span>  }<a name="line.565"></a>
+<span class="sourceLineNo">566</span>}<a name="line.566"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsThread.html
index 93d53f5..9b6511c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsThread.html
@@ -305,7 +305,7 @@
 <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>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (!scopes.isEmpty()) {<a name="line.300"></a>
+<span class="sourceLineNo">300</span>    if (!scopes.isEmpty() &amp;&amp; !logEdit.isReplay()) {<a name="line.300"></a>
 <span class="sourceLineNo">301</span>      logKey.setScopes(scopes);<a name="line.301"></a>
 <span class="sourceLineNo">302</span>    }<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  }<a name="line.303"></a>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apache_hbase_reference_guide.pdfmarks
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks
index 623059f..f4acf1b 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:20160219150414)
-  /CreationDate (D:20160219150414)
+  /ModDate (D:20160222154215)
+  /CreationDate (D:20160222154215)
   /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/f6cc9224/apidocs/index-all.html
----------------------------------------------------------------------
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index d7fdfde..f8f5425 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -9584,6 +9584,12 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/zookeeper/package-summary.html">org.apache.hadoop.hbase.zookeeper</a> - package org.apache.hadoop.hbase.zookeeper</dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a> - package org.apache.hbase.archetypes.exemplars.client</dt>
+<dd>
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mapreduce/TableOutputFormat.html#OUTPUT_CONF_PREFIX">OUTPUT_CONF_PREFIX</a></span> - Static variable in class org.apache.hadoop.hbase.mapreduce.<a href="./org/apache/hadoop/hbase/mapreduce/TableOutputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce">TableOutputFormat</a></dt>
 <dd>
 <div class="block">Prefix for configuration property overrides to apply in <a href="./org/apache/hadoop/hbase/mapreduce/TableOutputFormat.html#setConf(org.apache.hadoop.conf.Configuration)"><code>TableOutputFormat.setConf(Configuration)</code></a>.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apidocs/org/apache/hadoop/hbase/zookeeper/package-summary.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/zookeeper/package-summary.html b/apidocs/org/apache/hadoop/hbase/zookeeper/package-summary.html
index f2e8620..555e67d 100644
--- a/apidocs/org/apache/hadoop/hbase/zookeeper/package-summary.html
+++ b/apidocs/org/apache/hadoop/hbase/zookeeper/package-summary.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/wal/package-summary.html">Prev Package</a></li>
-<li>Next Package</li>
+<li><a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">Next Package</a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/zookeeper/package-summary.html" target="_top">Frames</a></li>
@@ -105,7 +105,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/wal/package-summary.html">Prev Package</a></li>
-<li>Next Package</li>
+<li><a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html">Next Package</a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/zookeeper/package-summary.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apidocs/org/apache/hadoop/hbase/zookeeper/package-tree.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/zookeeper/package-tree.html b/apidocs/org/apache/hadoop/hbase/zookeeper/package-tree.html
index b63d57b..d26214f 100644
--- a/apidocs/org/apache/hadoop/hbase/zookeeper/package-tree.html
+++ b/apidocs/org/apache/hadoop/hbase/zookeeper/package-tree.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/wal/package-tree.html">Prev</a></li>
-<li>Next</li>
+<li><a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-tree.html">Next</a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/zookeeper/package-tree.html" target="_top">Frames</a></li>
@@ -98,7 +98,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/wal/package-tree.html">Prev</a></li>
-<li>Next</li>
+<li><a href="../../../../../org/apache/hbase/archetypes/exemplars/client/package-tree.html">Next</a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/zookeeper/package-tree.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apidocs/org/apache/hbase/archetypes/exemplars/client/package-frame.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hbase/archetypes/exemplars/client/package-frame.html b/apidocs/org/apache/hbase/archetypes/exemplars/client/package-frame.html
new file mode 100644
index 0000000..3045143
--- /dev/null
+++ b/apidocs/org/apache/hbase/archetypes/exemplars/client/package-frame.html
@@ -0,0 +1,12 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>org.apache.hbase.archetypes.exemplars.client (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<h1 class="bar"><a href="../../../../../../org/apache/hbase/archetypes/exemplars/client/package-summary.html" target="classFrame">org.apache.hbase.archetypes.exemplars.client</a></h1>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apidocs/org/apache/hbase/archetypes/exemplars/client/package-summary.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hbase/archetypes/exemplars/client/package-summary.html b/apidocs/org/apache/hbase/archetypes/exemplars/client/package-summary.html
new file mode 100644
index 0000000..db8c4fa
--- /dev/null
+++ b/apidocs/org/apache/hbase/archetypes/exemplars/client/package-summary.html
@@ -0,0 +1,128 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>org.apache.hbase.archetypes.exemplars.client (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="org.apache.hbase.archetypes.exemplars.client (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-use.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/zookeeper/package-summary.html">Prev Package</a></li>
+<li>Next Package</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Package" class="title">Package&nbsp;org.apache.hbase.archetypes.exemplars.client</h1>
+<div class="docSummary">
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</div>
+<p>See:&nbsp;<a href="#package_description">Description</a></p>
+</div>
+<div class="contentContainer"><a name="package_description">
+<!--   -->
+</a>
+<h2 title="Package org.apache.hbase.archetypes.exemplars.client Description">Package org.apache.hbase.archetypes.exemplars.client Description</h2>
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li class="navBarCell1Rev">Package</li>
+<li>Class</li>
+<li><a href="package-use.html">Use</a></li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/zookeeper/package-summary.html">Prev Package</a></li>
+<li>Next Package</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-summary.html" target="_top">Frames</a></li>
+<li><a href="package-summary.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apidocs/org/apache/hbase/archetypes/exemplars/client/package-tree.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hbase/archetypes/exemplars/client/package-tree.html b/apidocs/org/apache/hbase/archetypes/exemplars/client/package-tree.html
new file mode 100644
index 0000000..9a34c9d
--- /dev/null
+++ b/apidocs/org/apache/hbase/archetypes/exemplars/client/package-tree.html
@@ -0,0 +1,118 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>org.apache.hbase.archetypes.exemplars.client Class Hierarchy (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="org.apache.hbase.archetypes.exemplars.client Class Hierarchy (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/zookeeper/package-tree.html">Prev</a></li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 class="title">Hierarchy For Package org.apache.hbase.archetypes.exemplars.client</h1>
+<span class="strong">Package Hierarchies:</span>
+<ul class="horizontal">
+<li><a href="../../../../../../overview-tree.html">All Packages</a></li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li>Use</li>
+<li class="navBarCell1Rev">Tree</li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../../../org/apache/hadoop/hbase/zookeeper/package-tree.html">Prev</a></li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-tree.html" target="_top">Frames</a></li>
+<li><a href="package-tree.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apidocs/org/apache/hbase/archetypes/exemplars/client/package-use.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hbase/archetypes/exemplars/client/package-use.html b/apidocs/org/apache/hbase/archetypes/exemplars/client/package-use.html
new file mode 100644
index 0000000..3746877
--- /dev/null
+++ b/apidocs/org/apache/hbase/archetypes/exemplars/client/package-use.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Package org.apache.hbase.archetypes.exemplars.client (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Package org.apache.hbase.archetypes.exemplars.client (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><a name="navbar_top_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-use.html" target="_top">Frames</a></li>
+<li><a href="package-use.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<div class="header">
+<h1 title="Uses of Package org.apache.hbase.archetypes.exemplars.client" class="title">Uses of Package<br>org.apache.hbase.archetypes.exemplars.client</h1>
+</div>
+<div class="contentContainer">No usage of org.apache.hbase.archetypes.exemplars.client</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><a name="navbar_bottom_firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li>Class</li>
+<li class="navBarCell1Rev">Use</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../../../index-all.html">Index</a></li>
+<li><a href="../../../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev</li>
+<li>Next</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hbase/archetypes/exemplars/client/package-use.html" target="_top">Frames</a></li>
+<li><a href="package-use.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apidocs/overview-frame.html
----------------------------------------------------------------------
diff --git a/apidocs/overview-frame.html b/apidocs/overview-frame.html
index bd90516..8b3d58d 100644
--- a/apidocs/overview-frame.html
+++ b/apidocs/overview-frame.html
@@ -62,6 +62,7 @@
 <li><a href="org/apache/hadoop/hbase/util/hbck/package-frame.html" target="packageFrame">org.apache.hadoop.hbase.util.hbck</a></li>
 <li><a href="org/apache/hadoop/hbase/wal/package-frame.html" target="packageFrame">org.apache.hadoop.hbase.wal</a></li>
 <li><a href="org/apache/hadoop/hbase/zookeeper/package-frame.html" target="packageFrame">org.apache.hadoop.hbase.zookeeper</a></li>
+<li><a href="org/apache/hbase/archetypes/exemplars/client/package-frame.html" target="packageFrame">org.apache.hbase.archetypes.exemplars.client</a></li>
 </ul>
 </div>
 <p>&nbsp;</p>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apidocs/overview-summary.html
----------------------------------------------------------------------
diff --git a/apidocs/overview-summary.html b/apidocs/overview-summary.html
index 940d12e..3c13e25 100644
--- a/apidocs/overview-summary.html
+++ b/apidocs/overview-summary.html
@@ -309,6 +309,14 @@ Input/OutputFormats, a table indexing MapReduce job, and utility methods.</div>
 <td class="colFirst"><a href="org/apache/hadoop/hbase/zookeeper/package-summary.html">org.apache.hadoop.hbase.zookeeper</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="org/apache/hbase/archetypes/exemplars/client/package-summary.html">org.apache.hbase.archetypes.exemplars.client</a></td>
+<td class="colLast">
+<div class="block">This package provides fully-functional exemplar Java code demonstrating
+ simple usage of the hbase-client API, for incorporation into a Maven
+ archetype with hbase-client dependency.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/apidocs/overview-tree.html b/apidocs/overview-tree.html
index fae2c89..e2e8764 100644
--- a/apidocs/overview-tree.html
+++ b/apidocs/overview-tree.html
@@ -115,7 +115,8 @@
 <li><a href="org/apache/hadoop/hbase/util/package-tree.html">org.apache.hadoop.hbase.util</a>, </li>
 <li><a href="org/apache/hadoop/hbase/util/hbck/package-tree.html">org.apache.hadoop.hbase.util.hbck</a>, </li>
 <li><a href="org/apache/hadoop/hbase/wal/package-tree.html">org.apache.hadoop.hbase.wal</a>, </li>
-<li><a href="org/apache/hadoop/hbase/zookeeper/package-tree.html">org.apache.hadoop.hbase.zookeeper</a></li>
+<li><a href="org/apache/hadoop/hbase/zookeeper/package-tree.html">org.apache.hadoop.hbase.zookeeper</a>, </li>
+<li><a href="org/apache/hbase/archetypes/exemplars/client/package-tree.html">org.apache.hbase.archetypes.exemplars.client</a></li>
 </ul>
 </div>
 <div class="contentContainer">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apidocs/package-list
----------------------------------------------------------------------
diff --git a/apidocs/package-list b/apidocs/package-list
index 75747e4..c0a87e3 100644
--- a/apidocs/package-list
+++ b/apidocs/package-list
@@ -49,3 +49,4 @@ org.apache.hadoop.hbase.util
 org.apache.hadoop.hbase.util.hbck
 org.apache.hadoop.hbase.wal
 org.apache.hadoop.hbase.zookeeper
+org.apache.hbase.archetypes.exemplars.client

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index acfc7a7..4a56991 100644
--- a/book.html
+++ b/book.html
@@ -14645,17 +14645,32 @@ The minimum flush unit is per region, not at individual MemStore level.</p>
 <div class="olist arabic">
 <ol class="arabic">
 <li>
-<p>When a MemStore reaches the size specified by <code>hbase.hregion.memstore.flush.size</code>, all MemStores that belong to its region will be flushed out to disk.</p>
+<p>When a MemStore reaches the size specified by <code>hbase.hregion.memstore.flush.size</code>,
+all MemStores that belong to its region will be flushed out to disk.</p>
 </li>
 <li>
-<p>When the overall MemStore usage reaches the value specified by <code>hbase.regionserver.global.memstore.upperLimit</code>, MemStores from various regions will be flushed out to disk to reduce overall MemStore usage in a RegionServer.
-The flush order is based on the descending order of a region&#8217;s MemStore usage.
-Regions will have their MemStores flushed until the overall MemStore usage drops to or slightly below <code>hbase.regionserver.global.memstore.lowerLimit</code>.</p>
+<p>When the overall MemStore usage reaches the value specified by
+<code>hbase.regionserver.global.memstore.upperLimit</code>, MemStores from various regions
+will be flushed out to disk to reduce overall MemStore usage in a RegionServer.</p>
+<div class="paragraph">
+<p>The flush order is based on the descending order of a region&#8217;s MemStore usage.</p>
+</div>
+<div class="paragraph">
+<p>Regions will have their MemStores flushed until the overall MemStore usage drops
+to or slightly below <code>hbase.regionserver.global.memstore.lowerLimit</code>.</p>
+</div>
 </li>
 <li>
-<p>When the number of WAL per region server reaches the value specified in <code>hbase.regionserver.max.logs</code>, MemStores from various regions will be flushed out to disk to reduce WAL count.
-The flush order is based on time.
-Regions with the oldest MemStores are flushed first until WAL count drops below <code>hbase.regionserver.max.logs</code>.</p>
+<p>When the number of WAL log entries in a given region server&#8217;s WAL reaches the
+value specified in <code>hbase.regionserver.max.logs</code>, MemStores from various regions
+will be flushed out to disk to reduce the number of logs in the WAL.</p>
+<div class="paragraph">
+<p>The flush order is based on time.</p>
+</div>
+<div class="paragraph">
+<p>Regions with the oldest MemStores are flushed first until WAL count drops below
+<code>hbase.regionserver.max.logs</code>.</p>
+</div>
 </li>
 </ol>
 </div>
@@ -22967,6 +22982,7 @@ Usage: bin/hbase org.apache.hadoop.hbase.tool.Canary [opts] [table1 [table2]...]
    -f &lt;B&gt;         stop whole program if first error occurs, default is true
    -t &lt;N&gt;         timeout for a check, default is 600000 (milliseconds)
    -writeSniffing enable the write sniffing in canary
+   -treatFailureAsError treats read / write failure as error
    -writeTable    The table used for write sniffing. Default is hbase:canary
    -D&lt;configProperty&gt;=&lt;value&gt; assigning or override the configuration params</pre>
 </div>
@@ -23142,7 +23158,21 @@ try to put data to these regions to check the write availability of each region
 </div>
 </div>
 <div class="sect3">
-<h4 id="_running_canary_in_a_kerberos_enabled_cluster"><a class="anchor" href="#_running_canary_in_a_kerberos_enabled_cluster"></a>128.1.8. Running Canary in a Kerberos-enabled Cluster</h4>
+<h4 id="_treat_read_write_failure_as_error"><a class="anchor" href="#_treat_read_write_failure_as_error"></a>128.1.8. Treat read / write failure as error</h4>
+<div class="paragraph">
+<p>By default, the canary tool only logs read failure, due to e.g. RetriesExhaustedException,
+while returning normal exit code. To treat read / write failure as error, you can run canary
+with the <code>-treatFailureAsError</code> option. When enabled, read / write failure would result in error
+exit code.</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>$ ${HBASE_HOME}/bin/hbase canary --treatFailureAsError</pre>
+</div>
+</div>
+</div>
+<div class="sect3">
+<h4 id="_running_canary_in_a_kerberos_enabled_cluster"><a class="anchor" href="#_running_canary_in_a_kerberos_enabled_cluster"></a>128.1.9. Running Canary in a Kerberos-enabled Cluster</h4>
 <div class="paragraph">
 <p>To run Canary in a Kerberos-enabled cluster, configure the following two properties in <em>hbase-site.xml</em>:</p>
 </div>
@@ -23444,6 +23474,19 @@ Invoke via:</p>
 <pre>$ bin/hbase org.apache.hadoop.hbase.mapreduce.Export &lt;tablename&gt; &lt;outputdir&gt; [&lt;versions&gt; [&lt;starttime&gt; [&lt;endtime&gt;]]]</pre>
 </div>
 </div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+To see usage instructions, run the command with no options. Available options include
+specifying column families and applying filters during the export.
+</td>
+</tr>
+</table>
+</div>
 <div class="paragraph">
 <p>By default, the <code>Export</code> tool only exports the newest version of a given cell, regardless of the number of versions stored. To export more than one version, replace <strong><em>&lt;versions&gt;</em></strong> with the desired number of versions.</p>
 </div>
@@ -23462,6 +23505,18 @@ Invoke via:</p>
 <pre>$ bin/hbase org.apache.hadoop.hbase.mapreduce.Import &lt;tablename&gt; &lt;inputdir&gt;</pre>
 </div>
 </div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+To see usage instructions, run the command with no options.
+</td>
+</tr>
+</table>
+</div>
 <div class="paragraph">
 <p>To import 0.94 exported files in a 0.96 cluster or onwards, you need to set system property "hbase.import.version" when running the import command as below:</p>
 </div>
@@ -25486,7 +25541,7 @@ The act of copying these files creates new HDFS metadata, which is why a restore
 <h3 id="ops.backup.live.replication"><a class="anchor" href="#ops.backup.live.replication"></a>135.2. Live Cluster Backup - Replication</h3>
 <div class="paragraph">
 <p>This approach assumes that there is a second cluster.
-See the HBase page on <a href="http://hbase.apache.org/replication.html">replication</a> for more information.</p>
+See the HBase page on <a href="http://hbase.apache.org/book.html#replication">replication</a> for more information.</p>
 </div>
 </div>
 <div class="sect2">
@@ -28635,6 +28690,16 @@ However any substantive discussion (as with any off-list project-related discuss
 </div>
 </div>
 </div>
+<div class="sect2">
+<h3 id="hbase.archetypes.development"><a class="anchor" href="#hbase.archetypes.development"></a>148.9. Development of HBase-related Maven archetypes</h3>
+<div class="paragraph">
+<p>The development of HBase-related Maven archetypes was begun with
+<a href="https://issues.apache.org/jira/browse/HBASE-14876">HBASE-14876</a>.
+For an overview of the hbase-archetypes infrastructure and instructions
+for developing new HBase-related Maven archetypes, please see
+<code>hbase/hbase-archetypes/README.md</code>.</p>
+</div>
+</div>
 </div>
 </div>
 <h1 id="unit.tests" class="sect0"><a class="anchor" href="#unit.tests"></a>Unit Testing HBase Applications</h1>
@@ -33120,7 +33185,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-19 14:38:06 UTC
+Last updated 2016-02-22 15:06:54 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index 6834dbd..b0b4013 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="20160219" />
+    <meta name="Date-Revision-yyyymmdd" content="20160222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -187,7 +187,7 @@
                       <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
 </li>
                   
-                      <li>      <a href="replication.html"  target="_blank" title="Cluster replication">Cluster replication</a>
+                      <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
                       <li class="dropdown-submenu">
@@ -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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
             </p>
                 </div>
 


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html
index 034d7ce..680f4c3 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.799">StoreFile.Writer</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.806">StoreFile.Writer</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/regionserver/compactions/Compactor.CellSink.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">Compactor.CellSink</a></pre>
 <div class="block">A StoreFile writer.  Use this to read/write HBase Store Files. It is package
@@ -340,7 +340,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>generalBloomFilterWriter</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilterWriter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilterWriter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.800">generalBloomFilterWriter</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilterWriter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilterWriter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.807">generalBloomFilterWriter</a></pre>
 </li>
 </ul>
 <a name="deleteFamilyBloomFilterWriter">
@@ -349,7 +349,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteFamilyBloomFilterWriter</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilterWriter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilterWriter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.801">deleteFamilyBloomFilterWriter</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilterWriter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilterWriter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.808">deleteFamilyBloomFilterWriter</a></pre>
 </li>
 </ul>
 <a name="bloomType">
@@ -358,7 +358,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>bloomType</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.802">bloomType</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.809">bloomType</a></pre>
 </li>
 </ul>
 <a name="lastBloomKey">
@@ -367,7 +367,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>lastBloomKey</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.803">lastBloomKey</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.810">lastBloomKey</a></pre>
 </li>
 </ul>
 <a name="lastBloomKeyOffset">
@@ -376,7 +376,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>lastBloomKeyOffset</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.804">lastBloomKeyOffset</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.811">lastBloomKeyOffset</a></pre>
 </li>
 </ul>
 <a name="lastBloomKeyLen">
@@ -385,7 +385,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>lastBloomKeyLen</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.804">lastBloomKeyLen</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.811">lastBloomKeyLen</a></pre>
 </li>
 </ul>
 <a name="lastCell">
@@ -394,7 +394,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>lastCell</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.805">lastCell</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.812">lastCell</a></pre>
 </li>
 </ul>
 <a name="earliestPutTs">
@@ -403,7 +403,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>earliestPutTs</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.806">earliestPutTs</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.813">earliestPutTs</a></pre>
 </li>
 </ul>
 <a name="lastDeleteFamilyCell">
@@ -412,7 +412,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>lastDeleteFamilyCell</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.807">lastDeleteFamilyCell</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.814">lastDeleteFamilyCell</a></pre>
 </li>
 </ul>
 <a name="deleteFamilyCnt">
@@ -421,7 +421,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteFamilyCnt</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.808">deleteFamilyCnt</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.815">deleteFamilyCnt</a></pre>
 </li>
 </ul>
 <a name="timeRangeTracker">
@@ -430,7 +430,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>timeRangeTracker</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TimeRangeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.810">timeRangeTracker</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TimeRangeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.817">timeRangeTracker</a></pre>
 </li>
 </ul>
 <a name="isTimeRangeTrackerSet">
@@ -439,7 +439,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>isTimeRangeTrackerSet</h4>
-<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.817">isTimeRangeTrackerSet</a></pre>
+<pre>boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.824">isTimeRangeTrackerSet</a></pre>
 </li>
 </ul>
 <a name="writer">
@@ -448,7 +448,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>writer</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFile.Writer.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFile.Writer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.819">writer</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFile.Writer.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFile.Writer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.826">writer</a></pre>
 </li>
 </ul>
 <a name="lastBloomKeyOnlyKV">
@@ -457,7 +457,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>lastBloomKeyOnlyKV</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue.KeyOnlyKeyValue</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.820">lastBloomKeyOnlyKV</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue.KeyOnlyKeyValue</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.827">lastBloomKeyOnlyKV</a></pre>
 </li>
 </ul>
 </li>
@@ -474,7 +474,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFile.Writer</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.835">StoreFile.Writer</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.842">StoreFile.Writer</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                 org.apache.hadoop.fs.Path&nbsp;path,
                 org.apache.hadoop.conf.Configuration&nbsp;conf,
                 <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;cacheConf,
@@ -505,7 +505,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>appendMetadata</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.886">appendMetadata</a>(long&nbsp;maxSequenceId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.893">appendMetadata</a>(long&nbsp;maxSequenceId,
                   boolean&nbsp;majorCompaction)
                     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">Writes meta data.
@@ -521,7 +521,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>appendMetadata</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.902">appendMetadata</a>(long&nbsp;maxSequenceId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.909">appendMetadata</a>(long&nbsp;maxSequenceId,
                   boolean&nbsp;majorCompaction,
                   long&nbsp;mobCellsCount)
                     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>
@@ -538,7 +538,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>appendTrackedTimestampsToMetadata</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.913">appendTrackedTimestampsToMetadata</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.920">appendTrackedTimestampsToMetadata</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">Add TimestampRange and earliest put timestamp to Metadata</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -551,7 +551,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeRangeTracker</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.922">setTimeRangeTracker</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TimeRangeTracker</a>&nbsp;trt)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.929">setTimeRangeTracker</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TimeRangeTracker</a>&nbsp;trt)</pre>
 <div class="block">Set TimeRangeTracker</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>trt</code> - </dd></dl>
 </li>
@@ -562,7 +562,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>trackTimestamps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.934">trackTimestamps</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.941">trackTimestamps</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <div class="block">Record the earlest Put timestamp.
 
  If the timeRangeTracker is not set,
@@ -576,7 +576,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>appendGeneralBloomfilter</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.943">appendGeneralBloomfilter</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.950">appendGeneralBloomfilter</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>
 <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>
@@ -588,7 +588,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>appendDeleteFamilyBloomFilter</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1030">appendDeleteFamilyBloomFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1037">appendDeleteFamilyBloomFilter</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>
 <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>
@@ -600,7 +600,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1053">append</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1060">append</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>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -615,7 +615,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>getPath</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1060">getPath</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1067">getPath</a>()</pre>
 </li>
 </ul>
 <a name="hasGeneralBloom()">
@@ -624,7 +624,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>hasGeneralBloom</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1064">hasGeneralBloom</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1071">hasGeneralBloom</a>()</pre>
 </li>
 </ul>
 <a name="getGeneralBloomWriter()">
@@ -633,7 +633,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>getGeneralBloomWriter</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/util/BloomFilterWriter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilterWriter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1073">getGeneralBloomWriter</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/util/BloomFilterWriter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilterWriter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1080">getGeneralBloomWriter</a>()</pre>
 <div class="block">For unit testing only.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the Bloom filter used by this writer.</dd></dl>
 </li>
@@ -644,7 +644,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>closeBloomFilter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1077">closeBloomFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilterWriter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilterWriter</a>&nbsp;bfw)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1084">closeBloomFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilterWriter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilterWriter</a>&nbsp;bfw)
                           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>
@@ -656,7 +656,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>closeGeneralBloomFilter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1085">closeGeneralBloomFilter</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1092">closeGeneralBloomFilter</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>
@@ -668,7 +668,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>closeDeleteFamilyBloomFilter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1102">closeDeleteFamilyBloomFilter</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1109">closeDeleteFamilyBloomFilter</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>
@@ -680,7 +680,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1118">close</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1125">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>
@@ -692,7 +692,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockList">
 <li class="blockList">
 <h4>appendFileInfo</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1134">appendFileInfo</a>(byte[]&nbsp;key,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1141">appendFileInfo</a>(byte[]&nbsp;key,
                   byte[]&nbsp;value)
                     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>
@@ -705,7 +705,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/compacti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getHFileWriter</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFile.Writer.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFile.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1140">getHFileWriter</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFile.Writer.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFile.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html#line.1147">getHFileWriter</a>()</pre>
 <div class="block">For use in testing, e.g. <code>CreateRandomStoreFile</code></div>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html
index 74f06d8..e1bd5ac 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.627">StoreFile.WriterBuilder</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.634">StoreFile.WriterBuilder</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>
 </li>
 </ul>
@@ -263,7 +263,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 final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.628">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.635">conf</a></pre>
 </li>
 </ul>
 <a name="cacheConf">
@@ -272,7 +272,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheConf</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.629">cacheConf</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.636">cacheConf</a></pre>
 </li>
 </ul>
 <a name="fs">
@@ -281,7 +281,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 final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.630">fs</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.637">fs</a></pre>
 </li>
 </ul>
 <a name="comparator">
@@ -290,7 +290,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>comparator</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.632">comparator</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.639">comparator</a></pre>
 </li>
 </ul>
 <a name="bloomType">
@@ -299,7 +299,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>bloomType</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.633">bloomType</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.640">bloomType</a></pre>
 </li>
 </ul>
 <a name="maxKeyCount">
@@ -308,7 +308,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>maxKeyCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.634">maxKeyCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.641">maxKeyCount</a></pre>
 </li>
 </ul>
 <a name="dir">
@@ -317,7 +317,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>dir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.635">dir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.642">dir</a></pre>
 </li>
 </ul>
 <a name="filePath">
@@ -326,7 +326,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>filePath</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.636">filePath</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.643">filePath</a></pre>
 </li>
 </ul>
 <a name="favoredNodes">
@@ -335,7 +335,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>favoredNodes</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.637">favoredNodes</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.644">favoredNodes</a></pre>
 </li>
 </ul>
 <a name="fileContext">
@@ -344,7 +344,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>fileContext</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.638">fileContext</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.645">fileContext</a></pre>
 </li>
 </ul>
 </li>
@@ -361,7 +361,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFile.WriterBuilder</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.640">StoreFile.WriterBuilder</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.647">StoreFile.WriterBuilder</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                        <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;cacheConf,
                        org.apache.hadoop.fs.FileSystem&nbsp;fs)</pre>
 </li>
@@ -380,7 +380,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>withOutputDir</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.654">withOutputDir</a>(org.apache.hadoop.fs.Path&nbsp;dir)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.661">withOutputDir</a>(org.apache.hadoop.fs.Path&nbsp;dir)</pre>
 <div class="block">Use either this method or <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#withFilePath(org.apache.hadoop.fs.Path)"><code>withFilePath(org.apache.hadoop.fs.Path)</code></a>, but not both.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>dir</code> - Path to column family directory. The directory is created if
           does not exist. The file is given a unique name within this
@@ -394,7 +394,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>withFilePath</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.665">withFilePath</a>(org.apache.hadoop.fs.Path&nbsp;filePath)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.672">withFilePath</a>(org.apache.hadoop.fs.Path&nbsp;filePath)</pre>
 <div class="block">Use either this method or <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#withOutputDir(org.apache.hadoop.fs.Path)"><code>withOutputDir(org.apache.hadoop.fs.Path)</code></a>, but not both.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>filePath</code> - the StoreFile path to write</dd>
 <dt><span class="strong">Returns:</span></dt><dd>this (for chained invocation)</dd></dl>
@@ -406,7 +406,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>withFavoredNodes</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.675">withFavoredNodes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[]&nbsp;favoredNodes)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.682">withFavoredNodes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[]&nbsp;favoredNodes)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>favoredNodes</code> - an array of favored nodes or possibly null</dd>
 <dt><span class="strong">Returns:</span></dt><dd>this (for chained invocation)</dd></dl>
 </li>
@@ -417,7 +417,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>withComparator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.680">withComparator</a>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.687">withComparator</a>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)</pre>
 </li>
 </ul>
 <a name="withBloomType(org.apache.hadoop.hbase.regionserver.BloomType)">
@@ -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>withBloomType</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.686">withBloomType</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a>&nbsp;bloomType)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.693">withBloomType</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a>&nbsp;bloomType)</pre>
 </li>
 </ul>
 <a name="withMaxKeyCount(long)">
@@ -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>withMaxKeyCount</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.696">withMaxKeyCount</a>(long&nbsp;maxKeyCount)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.703">withMaxKeyCount</a>(long&nbsp;maxKeyCount)</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>maxKeyCount</code> - estimated maximum number of keys we expect to add</dd>
 <dt><span class="strong">Returns:</span></dt><dd>this (for chained invocation)</dd></dl>
 </li>
@@ -446,7 +446,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>withFileContext</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.701">withFileContext</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;fileContext)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.708">withFileContext</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;fileContext)</pre>
 </li>
 </ul>
 <a name="withShouldDropCacheBehind(boolean)">
@@ -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>withShouldDropCacheBehind</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.706">withShouldDropCacheBehind</a>(boolean&nbsp;shouldDropCacheBehind)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.WriterBuilder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.713">withShouldDropCacheBehind</a>(boolean&nbsp;shouldDropCacheBehind)</pre>
 </li>
 </ul>
 <a name="build()">
@@ -464,7 +464,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>build</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.715">build</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Writer.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Writer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html#line.722">build</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">Create a store file writer. Client is responsible for closing file when
  done. If metadata, add BEFORE closing using

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.html
index 7ef49b9..710a29a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.html
@@ -473,39 +473,43 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#isMajorCompaction()">isMajorCompaction</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#isHFile()">isHFile</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#isReference()">isReference</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#isMajorCompaction()">isMajorCompaction</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#isReference()">isReference</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#isSkipResetSeqId(byte[])">isSkipResetSeqId</a></strong>(byte[]&nbsp;skipResetSeqId)</code>
 <div class="block">Gets whether to skip resetting the sequence id for cells.</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/StoreFile.html#markCompactedAway()">markCompactedAway</a></strong>()</code>
 <div class="block">Marks the status of the file as compactedAway.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#open(boolean)">open</a></strong>(boolean&nbsp;canUseDropBehind)</code>
 <div class="block">Opens reader on this store file.</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/StoreFile.html#setMaxMemstoreTS(long)">setMaxMemstoreTS</a></strong>(long&nbsp;maxMemstoreTS)</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/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/regionserver/StoreFile.html#toString()">toString</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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/regionserver/StoreFile.html#toStringDetailed()">toStringDetailed</a></strong>()</code>&nbsp;</td>
 </tr>
@@ -950,13 +954,23 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
  after <a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#open(boolean)"><code>open(boolean canUseDropBehind)</code></a> else may get wrong answer.</dd></dl>
 </li>
 </ul>
+<a name="isHFile()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isHFile</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.296">isHFile</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>True if this is HFile.</dd></dl>
+</li>
+</ul>
 <a name="isMajorCompaction()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>isMajorCompaction</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.296">isMajorCompaction</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.303">isMajorCompaction</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>True if this file was made by a major compaction.</dd></dl>
 </li>
 </ul>
@@ -966,7 +980,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>excludeFromMinorCompaction</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.306">excludeFromMinorCompaction</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.313">excludeFromMinorCompaction</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>True if this file should not be part of a minor compaction.</dd></dl>
 </li>
 </ul>
@@ -976,7 +990,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxSequenceId</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.313">getMaxSequenceId</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.320">getMaxSequenceId</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>This files maximum edit sequence id.</dd></dl>
 </li>
 </ul>
@@ -986,7 +1000,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getModificationTimeStamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.317">getModificationTimeStamp</a>()
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.324">getModificationTimeStamp</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>
@@ -998,7 +1012,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetadataValue</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.326">getMetadataValue</a>(byte[]&nbsp;key)</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.333">getMetadataValue</a>(byte[]&nbsp;key)</pre>
 <div class="block">Only used by the Striped Compaction Policy</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>key</code> - </dd>
 <dt><span class="strong">Returns:</span></dt><dd>value associated with the metadata key</dd></dl>
@@ -1010,7 +1024,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxMemstoreTSInList</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.338">getMaxMemstoreTSInList</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</pre>
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.345">getMaxMemstoreTSInList</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</pre>
 <div class="block">Return the largest memstoreTS found across all storefiles in
  the given list. Store files that were created by a mapreduce
  bulk load are ignored, as they do not correspond to any specific
@@ -1025,7 +1039,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxSequenceIdInList</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.355">getMaxSequenceIdInList</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</pre>
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.362">getMaxSequenceIdInList</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt;&nbsp;sfs)</pre>
 <div class="block">Return the highest sequence ID found across all storefiles in
  the given list.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>sfs</code> - </dd>
@@ -1039,7 +1053,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isBulkLoadResult</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.373">isBulkLoadResult</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.380">isBulkLoadResult</a>()</pre>
 <div class="block">Check if this storefile was created by bulk load.
  When a hfile is bulk loaded into HBase, we append
  <code>'_SeqId_&lt;id-when-loaded&gt;'</code> to the hfile name, unless
@@ -1056,7 +1070,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isCompactedAway</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.384">isCompactedAway</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.391">isCompactedAway</a>()</pre>
 </li>
 </ul>
 <a name="getRefCount()">
@@ -1065,7 +1079,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getRefCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.392">getRefCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.399">getRefCount</a>()</pre>
 </li>
 </ul>
 <a name="getBulkLoadTimestamp()">
@@ -1074,7 +1088,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getBulkLoadTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.399">getBulkLoadTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.406">getBulkLoadTimestamp</a>()</pre>
 <div class="block">Return the timestamp at which this bulk load file was generated.</div>
 </li>
 </ul>
@@ -1084,7 +1098,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getHDFSBlockDistribution</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.408">getHDFSBlockDistribution</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HDFSBlocksDistribution.html" title="class in org.apache.hadoop.hbase">HDFSBlocksDistribution</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.415">getHDFSBlockDistribution</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the cached value of HDFS blocks distribution. The cached value is
  calculated when store file is opened.</dd></dl>
 </li>
@@ -1095,7 +1109,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>open</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.418">open</a>(boolean&nbsp;canUseDropBehind)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.425">open</a>(boolean&nbsp;canUseDropBehind)
                        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">Opens reader on this store file.  Called by Constructor.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Reader for the store file.</dd>
@@ -1109,7 +1123,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.524">createReader</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.531">createReader</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>
@@ -1121,7 +1135,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createReader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.532">createReader</a>(boolean&nbsp;canUseDropBehind)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.539">createReader</a>(boolean&nbsp;canUseDropBehind)
                               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">Returns:</span></dt><dd>Reader for StoreFile. creates if necessary</dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -1134,7 +1148,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>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.554">getReader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.561">getReader</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Current reader.  Must call createReader first else returns null.</dd><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html#createReader()"><code>createReader()</code></a></dd></dl>
 </li>
 </ul>
@@ -1144,7 +1158,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>closeReader</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.562">closeReader</a>(boolean&nbsp;evictOnClose)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.569">closeReader</a>(boolean&nbsp;evictOnClose)
                  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>evictOnClose</code> - whether to evict blocks belonging to this file</dd>
 <dt><span class="strong">Throws:</span></dt>
@@ -1157,7 +1171,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>markCompactedAway</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.573">markCompactedAway</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.580">markCompactedAway</a>()</pre>
 <div class="block">Marks the status of the file as compactedAway.</div>
 </li>
 </ul>
@@ -1167,7 +1181,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteReader</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.583">deleteReader</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.590">deleteReader</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">Delete this file</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1180,7 +1194,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <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/regionserver/StoreFile.html#line.591">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/regionserver/StoreFile.html#line.598">toString</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#toString()" title="class or interface in java.lang">toString</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>
@@ -1193,7 +1207,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>toStringDetailed</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/regionserver/StoreFile.html#line.598">toStringDetailed</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/regionserver/StoreFile.html#line.605">toStringDetailed</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>a length description of this StoreFile, suitable for debug output</dd></dl>
 </li>
 </ul>
@@ -1203,7 +1217,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isSkipResetSeqId</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.618">isSkipResetSeqId</a>(byte[]&nbsp;skipResetSeqId)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.625">isSkipResetSeqId</a>(byte[]&nbsp;skipResetSeqId)</pre>
 <div class="block">Gets whether to skip resetting the sequence id for cells.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>skipResetSeqId</code> - The byte array of boolean.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>Whether to skip resetting the sequence id.</dd></dl>
@@ -1215,7 +1229,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getUniqueFile</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.749">getUniqueFile</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/regionserver/StoreFile.html#line.756">getUniqueFile</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                       org.apache.hadoop.fs.Path&nbsp;dir)
                                                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>fs</code> - </dd><dd><code>dir</code> - Directory to create file in.</dd>
@@ -1230,7 +1244,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMinimumTimestamp</h4>
-<pre>public&nbsp;<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/regionserver/StoreFile.html#line.758">getMinimumTimestamp</a>()</pre>
+<pre>public&nbsp;<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/regionserver/StoreFile.html#line.765">getMinimumTimestamp</a>()</pre>
 </li>
 </ul>
 <a name="getFileSplitPoint(org.apache.hadoop.hbase.CellComparator)">
@@ -1239,7 +1253,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getFileSplitPoint</h4>
-<pre>byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.770">getFileSplitPoint</a>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)
+<pre>byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.777">getFileSplitPoint</a>(<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="class in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)
                    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">Gets the approximate mid-point of this file that is optimal for use in splitting it.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>comparator</code> - Comparator used to compare KVs.</dd>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.StdOutSink.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    System.err.println("   -e             Use table/regionserver as r

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html
index 0cc571b..f0d9e09 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.WriterBuilder.html
@@ -299,1507 +299,1514 @@
 <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>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @return True if this file was made by a major compaction.<a name="line.294"></a>
+<span class="sourceLineNo">294</span>   * @return True if this is HFile.<a name="line.294"></a>
 <span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public boolean isMajorCompaction() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (this.majorCompaction == null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throw new NullPointerException("This has not been set yet");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.majorCompaction.get();<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>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return True if this file should not be part of a minor compaction.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public boolean excludeFromMinorCompaction() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    return this.excludeFromMinorCompaction;<a name="line.307"></a>
+<span class="sourceLineNo">296</span>  public boolean isHFile() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.fileInfo.isHFile(this.fileInfo.getPath());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<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>   * @return True if this file was made by a major compaction.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public boolean isMajorCompaction() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    if (this.majorCompaction == null) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      throw new NullPointerException("This has not been set yet");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return this.majorCompaction.get();<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>  /**<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return This files maximum edit sequence id.<a name="line.311"></a>
+<span class="sourceLineNo">311</span>   * @return True if this file should not be part of a minor compaction.<a name="line.311"></a>
 <span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public long getMaxSequenceId() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return this.sequenceid;<a name="line.314"></a>
+<span class="sourceLineNo">313</span>  public boolean excludeFromMinorCompaction() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return this.excludeFromMinorCompaction;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Only used by the Striped Compaction Policy<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param key<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @return value associated with the metadata key<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return metadataMap.get(key);<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Return the largest memstoreTS found across all storefiles in<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * the given list. Store files that were created by a mapreduce<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * does not yet have any store files.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long max = 0;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (StoreFile sf : sfs) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!sf.isBulkLoadResult()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        max = Math.max(max, sf.getMaxMemstoreTS());<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>    return max;<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>   * Return the highest sequence ID found across all storefiles in<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * the given list.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param sfs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * does not yet have any store files.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long max = 0;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (StoreFile sf : sfs) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return max;<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>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Check if this storefile was created by bulk load.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * explicitly turned off.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @return true if this storefile was created by bulk load.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean isBulkLoadResult() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean bulkLoadedHFile = false;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    String fileName = this.getPath().getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (startPos != -1) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      bulkLoadedHFile = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @VisibleForTesting<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public boolean isCompactedAway() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (this.reader != null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return this.reader.isCompactedAway();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  @VisibleForTesting<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public int getRefCount() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return this.reader.refCount.get();<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>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Return the timestamp at which this bulk load file was generated.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public long getBulkLoadTimestamp() {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * calculated when store file is opened.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return this.fileInfo.getHDFSBlockDistribution();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return Reader for the store file.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IOException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @see #closeReader(boolean)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    if (this.reader != null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throw new IllegalAccessError("Already open");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // Open the StoreFile.Reader<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Read in our metadata.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (b != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // since store files are distinguished by sequence id, the one half would<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // subsume the other.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.sequenceid = Bytes.toLong(b);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      if (fileInfo.isTopReference()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        this.sequenceid += 1;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (isBulkLoadResult()){<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // generate the sequenceId from the fileName<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      String fileName = this.getPath().getName();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (startPos != -1) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            fileName.indexOf('_', startPos + 6)));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        // Handle reference files as done above.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (fileInfo.isTopReference()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // have the same row key but different seqIds.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      this.reader.setBulkLoaded(true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (b != null) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (b != null) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      boolean mc = Bytes.toBoolean(b);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (this.majorCompaction == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.majorCompaction.set(mc);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      this.majorCompaction = new AtomicBoolean(false);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (cfBloomType != BloomType.NONE) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (hfileBloomType != cfBloomType) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.info("HFile Bloom filter type for "<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            + "configuration");<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (timerangeBytes != null) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    } catch (IllegalArgumentException e) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          "proceeding without", e);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.reader.timeRangeTracker = null;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // initialize so we can reuse them after reader closed.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    firstKey = reader.getFirstKey();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    lastKey = reader.getLastKey();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    comparator = reader.getComparator();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.reader;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public Reader createReader() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return createReader(false);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * @return Reader for StoreFile. creates if necessary<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @throws IOException<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    if (this.reader == null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        this.reader = open(canUseDropBehind);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (IOException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        try {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          boolean evictOnClose =<a name="line.538"></a>
-<span class="sourceLineNo">539</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.539"></a>
-<span class="sourceLineNo">540</span>          this.closeReader(evictOnClose);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        } catch (IOException ee) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        throw e;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return this.reader;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<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>   * @return Current reader.  Must call createReader first else returns null.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @see #createReader()<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public Reader getReader() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this.reader;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @throws IOException<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   */<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (this.reader != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      this.reader.close(evictOnClose);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      this.reader = null;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * Marks the status of the file as compactedAway.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public void markCompactedAway() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    if (this.reader != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      this.reader.markCompactedAway();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * Delete this file<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @throws IOException<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  public void deleteReader() throws IOException {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    boolean evictOnClose =<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.585"></a>
-<span class="sourceLineNo">586</span>    closeReader(evictOnClose);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    this.fs.delete(getPath(), true);<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>  @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public String toString() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return this.fileInfo.toString();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public String toStringDetailed() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    StringBuilder sb = new StringBuilder();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    sb.append(this.getPath().toString());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    sb.append(", isReference=").append(isReference());<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (isBulkLoadResult()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return sb.toString();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @return Whether to skip resetting the sequence id.<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      justification="Will not overflow")<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  public static class WriterBuilder {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    private final Configuration conf;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final CacheConfig cacheConf;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private final FileSystem fs;<a name="line.630"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @return This files maximum edit sequence id.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public long getMaxSequenceId() {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this.sequenceid;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * Only used by the Striped Compaction Policy<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @param key<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @return value associated with the metadata key<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return metadataMap.get(key);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<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>   * Return the largest memstoreTS found across all storefiles in<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * the given list. Store files that were created by a mapreduce<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * does not yet have any store files.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    long max = 0;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (StoreFile sf : sfs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (!sf.isBulkLoadResult()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        max = Math.max(max, sf.getMaxMemstoreTS());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return max;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Return the highest sequence ID found across all storefiles in<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * the given list.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param sfs<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * does not yet have any store files.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    long max = 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    for (StoreFile sf : sfs) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return max;<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>  /**<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * Check if this storefile was created by bulk load.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * explicitly turned off.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @return true if this storefile was created by bulk load.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean isBulkLoadResult() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    boolean bulkLoadedHFile = false;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String fileName = this.getPath().getName();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (startPos != -1) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      bulkLoadedHFile = true;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @VisibleForTesting<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  public boolean isCompactedAway() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (this.reader != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return this.reader.isCompactedAway();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return true;<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>  @VisibleForTesting<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public int getRefCount() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return this.reader.refCount.get();<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 timestamp at which this bulk load file was generated.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public long getBulkLoadTimestamp() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * calculated when store file is opened.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return this.fileInfo.getHDFSBlockDistribution();<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>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return Reader for the store file.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @throws IOException<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @see #closeReader(boolean)<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (this.reader != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      throw new IllegalAccessError("Already open");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Open the StoreFile.Reader<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // Read in our metadata.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    if (b != null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // since store files are distinguished by sequence id, the one half would<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      // subsume the other.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      this.sequenceid = Bytes.toLong(b);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      if (fileInfo.isTopReference()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        this.sequenceid += 1;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (isBulkLoadResult()){<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // generate the sequenceId from the fileName<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      String fileName = this.getPath().getName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      if (startPos != -1) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            fileName.indexOf('_', startPos + 6)));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        // Handle reference files as done above.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        if (fileInfo.isTopReference()) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      // have the same row key but different seqIds.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      this.reader.setBulkLoaded(true);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (b != null) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    if (b != null) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      boolean mc = Bytes.toBoolean(b);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      if (this.majorCompaction == null) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      } else {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        this.majorCompaction.set(mc);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      this.majorCompaction = new AtomicBoolean(false);<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>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    if (cfBloomType != BloomType.NONE) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (hfileBloomType != cfBloomType) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        LOG.info("HFile Bloom filter type for "<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            + "configuration");<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (timerangeBytes != null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IllegalArgumentException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.520"></a>
+<span class="sourceLineNo">521</span>          "proceeding without", e);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      this.reader.timeRangeTracker = null;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // initialize so we can reuse them after reader closed.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    firstKey = reader.getFirstKey();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    lastKey = reader.getLastKey();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    comparator = reader.getComparator();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return this.reader;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>  public Reader createReader() throws IOException {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    return createReader(false);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>  /**<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @return Reader for StoreFile. creates if necessary<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @throws IOException<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (this.reader == null) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        this.reader = open(canUseDropBehind);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (IOException e) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        try {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          boolean evictOnClose =<a name="line.545"></a>
+<span class="sourceLineNo">546</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.546"></a>
+<span class="sourceLineNo">547</span>          this.closeReader(evictOnClose);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        } catch (IOException ee) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        throw e;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return this.reader;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * @return Current reader.  Must call createReader first else returns null.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @see #createReader()<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   */<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public Reader getReader() {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    return this.reader;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
+<span class="sourceLineNo">564</span><a name="line.564"></a>
+<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    if (this.reader != null) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.reader.close(evictOnClose);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.reader = null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<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>  /**<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * Marks the status of the file as compactedAway.<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void markCompactedAway() {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    if (this.reader != null) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.reader.markCompactedAway();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * Delete this file<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  public void deleteReader() throws IOException {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    boolean evictOnClose =<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.592"></a>
+<span class="sourceLineNo">593</span>    closeReader(evictOnClose);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    this.fs.delete(getPath(), true);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>  @Override<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  public String toString() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return this.fileInfo.toString();<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  public String toStringDetailed() {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    StringBuilder sb = new StringBuilder();<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    sb.append(this.getPath().toString());<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    sb.append(", isReference=").append(isReference());<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    if (isBulkLoadResult()) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return sb.toString();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return Whether to skip resetting the sequence id.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return false;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
 <span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    private BloomType bloomType = BloomType.NONE;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    private long maxKeyCount = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    private Path dir;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    private Path filePath;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    private InetSocketAddress[] favoredNodes;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    private HFileContext fileContext;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        FileSystem fs) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      this.conf = conf;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.cacheConf = cacheConf;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      this.fs = fs;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    }<a name="line.645"></a>
+<span class="sourceLineNo">632</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      justification="Will not overflow")<a name="line.633"></a>
+<span class="sourceLineNo">634</span>  public static class WriterBuilder {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    private final Configuration conf;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    private final CacheConfig cacheConf;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    private final FileSystem fs;<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    private BloomType bloomType = BloomType.NONE;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    private long maxKeyCount = 0;<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    private Path dir;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    private Path filePath;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    private InetSocketAddress[] favoredNodes;<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    private HFileContext fileContext;<a name="line.645"></a>
 <span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * @param dir Path to column family directory. The directory is created if<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *          does not exist. The file is given a unique name within this<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     *          directory.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     * @return this (for chained invocation)<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      Preconditions.checkNotNull(dir);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.dir = dir;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return this;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @param filePath the StoreFile path to write<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * @return this (for chained invocation)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     */<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      Preconditions.checkNotNull(filePath);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      this.filePath = filePath;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      return this;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    /**<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     * @return this (for chained invocation)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      this.favoredNodes = favoredNodes;<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      return this;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      Preconditions.checkNotNull(comparator);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      this.comparator = comparator;<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      return this;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      Preconditions.checkNotNull(bloomType);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      this.bloomType = bloomType;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      return this;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>    /**<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * @return this (for chained invocation)<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      this.maxKeyCount = maxKeyCount;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      return this;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      this.fileContext = fileContext;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      return this;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      return this;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    /**<a name="line.710"></a>
-<span class="sourceLineNo">711</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.711"></a>
-<span class="sourceLineNo">712</span>     * done. If metadata, add BEFORE closing using<a name="line.712"></a>
-<span class="sourceLineNo">713</span>     * {@link Writer#appendMetadata}.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>     */<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    public Writer build() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            "or file path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>      if (dir == null) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        dir = filePath.getParent();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>      if (!fs.exists(dir)) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        fs.mkdirs(dir);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (filePath == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        filePath = getUniqueFile(fs, dir);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        if (!BloomFilterFactory.isGeneralBloomEnabled(conf)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>          bloomType = BloomType.NONE;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">647</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        FileSystem fs) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.conf = conf;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      this.cacheConf = cacheConf;<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      this.fs = fs;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * @param dir Path to column family directory. The directory is created if<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     *          does not exist. The file is given a unique name within this<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *          directory.<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     * @return this (for chained invocation)<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      Preconditions.checkNotNull(dir);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.dir = dir;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      return this;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span>    /**<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * @param filePath the StoreFile path to write<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     * @return this (for chained invocation)<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      Preconditions.checkNotNull(filePath);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      this.filePath = filePath;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      return this;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    /**<a name="line.678"></a>
+<span class="sourceLineNo">679</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.679"></a>
+<span class="sourceLineNo">680</span>     * @return this (for chained invocation)<a name="line.680"></a>
+<span class="sourceLineNo">681</span>     */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      this.favoredNodes = favoredNodes;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      return this;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      Preconditions.checkNotNull(comparator);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      this.comparator = comparator;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      return this;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      Preconditions.checkNotNull(bloomType);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      this.bloomType = bloomType;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return this;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    /**<a name="line.699"></a>
+<span class="sourceLineNo">700</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.700"></a>
+<span class="sourceLineNo">701</span>     * @return this (for chained invocation)<a name="line.701"></a>
+<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      this.maxKeyCount = maxKeyCount;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return this;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      this.fileContext = fileContext;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      return this;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return this;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.718"></a>
+<span class="sourceLineNo">719</span>     * done. If metadata, add BEFORE closing using<a name="line.719"></a>
+<span class="sourceLineNo">720</span>     * {@link Writer#appendMetadata}.<a name="line.720"></a>
+<span class="sourceLineNo">721</span>     */<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    public Writer build() throws IOException {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.724"></a>
+<span class="sourceLineNo">725</span>            "or file path");<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (dir == null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        dir = filePath.getParent();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (!fs.exists(dir)) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        fs.mkdirs(dir);<a name="line.733"></a>
 <span class="sourceLineNo">734</span>      }<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (comparator == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        comparator = CellComparator.COMPARATOR;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      return new Writer(fs, filePath,<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          conf, cacheConf, comparator, bloomType, maxKeyCount, favoredNodes, fileContext);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  /**<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @param fs<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param dir Directory to create file in.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return random filename inside passed &lt;code&gt;dir&lt;/code&gt;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  public static Path getUniqueFile(final FileSystem fs, final Path dir)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throws IOException {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    if (!fs.getFileStatus(dir).isDirectory()) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new IOException("Expecting " + dir.toString() +<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        " to be a directory");<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return new Path(dir, UUID.randomUUID().toString().replaceAll("-", ""));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  public Long getMinimumTimestamp() {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return (getReader().timeRangeTracker == null) ?<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        null :<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        getReader().timeRangeTracker.getMinimumTimestamp();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * Gets the approximate mid-point of this file that is optimal for use in splitting it.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @param comparator Comparator used to compare KVs.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @return The split point row, or null if splitting is not possible, or reader is null.<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  @SuppressWarnings("deprecation")<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  byte[] getFileSplitPoint(CellComparator comparator) throws IOException {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    if (this.reader == null) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.warn("Storefile " + this + " Reader is null; cannot get split point");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return null;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    // Get first, last, and mid keys.  Midkey is the key that starts block<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // in middle of hfile.  Has column and timestamp.  Need to return just<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // the row we want to split on as midkey.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Cell midkey = this.reader.midkey();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    if (midkey != null) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Cell firstKey = this.reader.getFirstKey();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      Cell lastKey = this.reader.getLastKey();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      // if the midkey is the same as the first or last keys, we cannot (ever) split this region.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      if (comparator.compareRows(midkey, firstKey) == 0<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          || comparator.compareRows(midkey, lastKey) == 0) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (LOG.isDebugEnabled()) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("cannot split because midkey is the same as first or last row");<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        return null;<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return CellUtil.cloneRow(midkey);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return null;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * A StoreFile writer.  Use this to read/write HBase Store Files. It is package<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * local because it is an implementation detail of the HBase regionserver.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  public static class Writer implements Compactor.CellSink {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    private final BloomFilterWriter generalBloomFilterWriter;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    private final BloomFilterWriter deleteFamilyBloomFilterWriter;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    private final BloomType bloomType;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    private byte[] lastBloomKey;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    private int lastBloomKeyOffset, lastBloomKeyLen;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    private Cell lastCell = null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    private long earliestPutTs = HConstants.LATEST_TIMESTAMP;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    private Cell lastDeleteFamilyCell = null;<

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html
index ad4d8f2..ffb870d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html
@@ -106,301 +106,321 @@
 <span class="sourceLineNo">098</span>  long getStoreFileSize();<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>   * Get the number of requests per second.<a name="line.101"></a>
+<span class="sourceLineNo">101</span>   * @return Max age of store files hosted on this region server<a name="line.101"></a>
 <span class="sourceLineNo">102</span>   */<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  double getRequestsPerSecond();<a name="line.103"></a>
+<span class="sourceLineNo">103</span>  long getMaxStoreFileAge();<a name="line.103"></a>
 <span class="sourceLineNo">104</span><a name="line.104"></a>
 <span class="sourceLineNo">105</span>  /**<a name="line.105"></a>
-<span class="sourceLineNo">106</span>   * Get the total number of requests per second.<a name="line.106"></a>
+<span class="sourceLineNo">106</span>   * @return Min age of store files hosted on this region server<a name="line.106"></a>
 <span class="sourceLineNo">107</span>   */<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  long getTotalRequestCount();<a name="line.108"></a>
+<span class="sourceLineNo">108</span>  long getMinStoreFileAge();<a name="line.108"></a>
 <span class="sourceLineNo">109</span><a name="line.109"></a>
 <span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * Get the number of read requests to regions hosted on this region server.<a name="line.111"></a>
+<span class="sourceLineNo">111</span>   *  @return Average age of store files hosted on this region server<a name="line.111"></a>
 <span class="sourceLineNo">112</span>   */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  long getReadRequestsCount();<a name="line.113"></a>
+<span class="sourceLineNo">113</span>  long getAvgStoreFileAge();<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>   * Get the number of filtered read requests to regions hosted on this region server.<a name="line.116"></a>
+<span class="sourceLineNo">116</span>   *  @return Number of reference files on this region server<a name="line.116"></a>
 <span class="sourceLineNo">117</span>   */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  long getFilteredReadRequestsCount();<a name="line.118"></a>
+<span class="sourceLineNo">118</span>  long getNumReferenceFiles();<a name="line.118"></a>
 <span class="sourceLineNo">119</span><a name="line.119"></a>
 <span class="sourceLineNo">120</span>  /**<a name="line.120"></a>
-<span class="sourceLineNo">121</span>   * Get the number of write requests to regions hosted on this region server.<a name="line.121"></a>
+<span class="sourceLineNo">121</span>   * Get the number of requests per second.<a name="line.121"></a>
 <span class="sourceLineNo">122</span>   */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  long getWriteRequestsCount();<a name="line.123"></a>
+<span class="sourceLineNo">123</span>  double getRequestsPerSecond();<a name="line.123"></a>
 <span class="sourceLineNo">124</span><a name="line.124"></a>
 <span class="sourceLineNo">125</span>  /**<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * Get the number of CAS operations that failed.<a name="line.126"></a>
+<span class="sourceLineNo">126</span>   * Get the total number of requests per second.<a name="line.126"></a>
 <span class="sourceLineNo">127</span>   */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  long getCheckAndMutateChecksFailed();<a name="line.128"></a>
+<span class="sourceLineNo">128</span>  long getTotalRequestCount();<a name="line.128"></a>
 <span class="sourceLineNo">129</span><a name="line.129"></a>
 <span class="sourceLineNo">130</span>  /**<a name="line.130"></a>
-<span class="sourceLineNo">131</span>   * Get the number of CAS operations that passed.<a name="line.131"></a>
+<span class="sourceLineNo">131</span>   * Get the number of read requests to regions hosted on this region server.<a name="line.131"></a>
 <span class="sourceLineNo">132</span>   */<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  long getCheckAndMutateChecksPassed();<a name="line.133"></a>
+<span class="sourceLineNo">133</span>  long getReadRequestsCount();<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>   * Get the Size (in bytes) of indexes in storefiles on disk.<a name="line.136"></a>
+<span class="sourceLineNo">136</span>   * Get the number of filtered read requests to regions hosted on this region server.<a name="line.136"></a>
 <span class="sourceLineNo">137</span>   */<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  long getStoreFileIndexSize();<a name="line.138"></a>
+<span class="sourceLineNo">138</span>  long getFilteredReadRequestsCount();<a name="line.138"></a>
 <span class="sourceLineNo">139</span><a name="line.139"></a>
 <span class="sourceLineNo">140</span>  /**<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * Get the size (in bytes) of of the static indexes including the roots.<a name="line.141"></a>
+<span class="sourceLineNo">141</span>   * Get the number of write requests to regions hosted on this region server.<a name="line.141"></a>
 <span class="sourceLineNo">142</span>   */<a name="line.142"></a>
-<span class="sourceLineNo">143</span>  long getTotalStaticIndexSize();<a name="line.143"></a>
+<span class="sourceLineNo">143</span>  long getWriteRequestsCount();<a name="line.143"></a>
 <span class="sourceLineNo">144</span><a name="line.144"></a>
 <span class="sourceLineNo">145</span>  /**<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * Get the size (in bytes) of the static bloom filters.<a name="line.146"></a>
+<span class="sourceLineNo">146</span>   * Get the number of CAS operations that failed.<a name="line.146"></a>
 <span class="sourceLineNo">147</span>   */<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  long getTotalStaticBloomSize();<a name="line.148"></a>
+<span class="sourceLineNo">148</span>  long getCheckAndMutateChecksFailed();<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>   * Number of mutations received with WAL explicitly turned off.<a name="line.151"></a>
+<span class="sourceLineNo">151</span>   * Get the number of CAS operations that passed.<a name="line.151"></a>
 <span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  long getNumMutationsWithoutWAL();<a name="line.153"></a>
+<span class="sourceLineNo">153</span>  long getCheckAndMutateChecksPassed();<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>   * Ammount of data in the memstore but not in the WAL because mutations explicitly had their<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * WAL turned off.<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   */<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  long getDataInMemoryWithoutWAL();<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  /**<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * Get the percent of HFiles' that are local.<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  double getPercentFileLocal();<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>   * Get the percent of HFiles' that are local for secondary region replicas.<a name="line.167"></a>
-<span class="sourceLineNo">168</span>   */<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  double getPercentFileLocalSecondaryRegions();<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>   * Get the size of the split queue<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  int getSplitQueueSize();<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>   * Get the size of the compaction queue<a name="line.177"></a>
+<span class="sourceLineNo">156</span>   * Get the Size (in bytes) of indexes in storefiles on disk.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  long getStoreFileIndexSize();<a name="line.158"></a>
+<span class="sourceLineNo">159</span><a name="line.159"></a>
+<span class="sourceLineNo">160</span>  /**<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * Get the size (in bytes) of of the static indexes including the roots.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   */<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  long getTotalStaticIndexSize();<a name="line.163"></a>
+<span class="sourceLineNo">164</span><a name="line.164"></a>
+<span class="sourceLineNo">165</span>  /**<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * Get the size (in bytes) of the static bloom filters.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  long getTotalStaticBloomSize();<a name="line.168"></a>
+<span class="sourceLineNo">169</span><a name="line.169"></a>
+<span class="sourceLineNo">170</span>  /**<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   * Number of mutations received with WAL explicitly turned off.<a name="line.171"></a>
+<span class="sourceLineNo">172</span>   */<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  long getNumMutationsWithoutWAL();<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>   * Ammount of data in the memstore but not in the WAL because mutations explicitly had their<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * WAL turned off.<a name="line.177"></a>
 <span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  int getCompactionQueueSize();<a name="line.179"></a>
+<span class="sourceLineNo">179</span>  long getDataInMemoryWithoutWAL();<a name="line.179"></a>
 <span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>  int getSmallCompactionQueueSize();<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  int getLargeCompactionQueueSize();<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>   * Get the size of the flush queue.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  int getFlushQueueSize();<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>   * Get the size (in bytes) of the block cache that is free.<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  long getBlockCacheFreeSize();<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * Get the number of items in the block cache.<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   */<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  long getBlockCacheCount();<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>   * Get the total size (in bytes) of the block cache.<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  long getBlockCacheSize();<a name="line.203"></a>
+<span class="sourceLineNo">181</span>  /**<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * Get the percent of HFiles' that are local.<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   */<a name="line.183"></a>
+<span class="sourceLineNo">184</span>  double getPercentFileLocal();<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>   * Get the percent of HFiles' that are local for secondary region replicas.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  double getPercentFileLocalSecondaryRegions();<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>   * Get the size of the split queue<a name="line.192"></a>
+<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  int getSplitQueueSize();<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>   * Get the size of the compaction queue<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   */<a name="line.198"></a>
+<span class="sourceLineNo">199</span>  int getCompactionQueueSize();<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>  int getSmallCompactionQueueSize();<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>  int getLargeCompactionQueueSize();<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>   * Get the count of hits to the block cache<a name="line.206"></a>
+<span class="sourceLineNo">206</span>   * Get the size of the flush queue.<a name="line.206"></a>
 <span class="sourceLineNo">207</span>   */<a name="line.207"></a>
-<span class="sourceLineNo">208</span>  long getBlockCacheHitCount();<a name="line.208"></a>
+<span class="sourceLineNo">208</span>  int getFlushQueueSize();<a name="line.208"></a>
 <span class="sourceLineNo">209</span><a name="line.209"></a>
 <span class="sourceLineNo">210</span>  /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * Get the count of hits to primary replica in the block cache<a name="line.211"></a>
+<span class="sourceLineNo">211</span>   * Get the size (in bytes) of the block cache that is free.<a name="line.211"></a>
 <span class="sourceLineNo">212</span>   */<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  long getBlockCachePrimaryHitCount();<a name="line.213"></a>
+<span class="sourceLineNo">213</span>  long getBlockCacheFreeSize();<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>   * Get the count of misses to the block cache.<a name="line.216"></a>
+<span class="sourceLineNo">216</span>   * Get the number of items in the block cache.<a name="line.216"></a>
 <span class="sourceLineNo">217</span>   */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  long getBlockCacheMissCount();<a name="line.218"></a>
+<span class="sourceLineNo">218</span>  long getBlockCacheCount();<a name="line.218"></a>
 <span class="sourceLineNo">219</span><a name="line.219"></a>
 <span class="sourceLineNo">220</span>  /**<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * Get the count of misses to primary replica in the block cache.<a name="line.221"></a>
+<span class="sourceLineNo">221</span>   * Get the total size (in bytes) of the block cache.<a name="line.221"></a>
 <span class="sourceLineNo">222</span>   */<a name="line.222"></a>
-<span class="sourceLineNo">223</span>  long getBlockCachePrimaryMissCount();<a name="line.223"></a>
+<span class="sourceLineNo">223</span>  long getBlockCacheSize();<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>   * Get the number of items evicted from the block cache.<a name="line.226"></a>
+<span class="sourceLineNo">226</span>   * Get the count of hits to the block cache<a name="line.226"></a>
 <span class="sourceLineNo">227</span>   */<a name="line.227"></a>
-<span class="sourceLineNo">228</span>  long getBlockCacheEvictedCount();<a name="line.228"></a>
+<span class="sourceLineNo">228</span>  long getBlockCacheHitCount();<a name="line.228"></a>
 <span class="sourceLineNo">229</span><a name="line.229"></a>
 <span class="sourceLineNo">230</span>  /**<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * Get the number of items evicted from primary replica in the block cache.<a name="line.231"></a>
+<span class="sourceLineNo">231</span>   * Get the count of hits to primary replica in the block cache<a name="line.231"></a>
 <span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  long getBlockCachePrimaryEvictedCount();<a name="line.233"></a>
+<span class="sourceLineNo">233</span>  long getBlockCachePrimaryHitCount();<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>   * Get the percent of all requests that hit the block cache.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
-<span class="sourceLineNo">239</span>  double getBlockCacheHitPercent();<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>   * Get the percent of requests with the block cache turned on that hit the block cache.<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>  double getBlockCacheHitCachingPercent();<a name="line.244"></a>
-<span class="sourceLineNo">245</span><a name="line.245"></a>
-<span class="sourceLineNo">246</span>  /**<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   * Number of cache insertions that failed.<a name="line.247"></a>
-<span class="sourceLineNo">248</span>   */<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  long getBlockCacheFailedInsertions();<a name="line.249"></a>
-<span class="sourceLineNo">250</span><a name="line.250"></a>
-<span class="sourceLineNo">251</span>  /**<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * Force a re-computation of the metrics.<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   */<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  void forceRecompute();<a name="line.254"></a>
+<span class="sourceLineNo">235</span>  /**<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * Get the count of misses to the block cache.<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   */<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  long getBlockCacheMissCount();<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>  /**<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   * Get the count of misses to primary replica in the block cache.<a name="line.241"></a>
+<span class="sourceLineNo">242</span>   */<a name="line.242"></a>
+<span class="sourceLineNo">243</span>  long getBlockCachePrimaryMissCount();<a name="line.243"></a>
+<span class="sourceLineNo">244</span><a name="line.244"></a>
+<span class="sourceLineNo">245</span>  /**<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * Get the number of items evicted from the block cache.<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  long getBlockCacheEvictedCount();<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>   * Get the number of items evicted from primary replica in the block cache.<a name="line.251"></a>
+<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  long getBlockCachePrimaryEvictedCount();<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>   * Get the amount of time that updates were blocked.<a name="line.257"></a>
+<span class="sourceLineNo">257</span>   * Get the percent of all requests that hit the block cache.<a name="line.257"></a>
 <span class="sourceLineNo">258</span>   */<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  long getUpdatesBlockedTime();<a name="line.259"></a>
+<span class="sourceLineNo">259</span>  double getBlockCacheHitPercent();<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>   * Get the number of cells flushed to disk.<a name="line.262"></a>
+<span class="sourceLineNo">262</span>   * Get the percent of requests with the block cache turned on that hit the block cache.<a name="line.262"></a>
 <span class="sourceLineNo">263</span>   */<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  long getFlushedCellsCount();<a name="line.264"></a>
+<span class="sourceLineNo">264</span>  double getBlockCacheHitCachingPercent();<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>   * Get the number of cells processed during minor compactions.<a name="line.267"></a>
+<span class="sourceLineNo">267</span>   * Number of cache insertions that failed.<a name="line.267"></a>
 <span class="sourceLineNo">268</span>   */<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  long getCompactedCellsCount();<a name="line.269"></a>
+<span class="sourceLineNo">269</span>  long getBlockCacheFailedInsertions();<a name="line.269"></a>
 <span class="sourceLineNo">270</span><a name="line.270"></a>
 <span class="sourceLineNo">271</span>  /**<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * Get the number of cells processed during major compactions.<a name="line.272"></a>
+<span class="sourceLineNo">272</span>   * Force a re-computation of the metrics.<a name="line.272"></a>
 <span class="sourceLineNo">273</span>   */<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  long getMajorCompactedCellsCount();<a name="line.274"></a>
+<span class="sourceLineNo">274</span>  void forceRecompute();<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>   * Get the total amount of data flushed to disk, in bytes.<a name="line.277"></a>
+<span class="sourceLineNo">277</span>   * Get the amount of time that updates were blocked.<a name="line.277"></a>
 <span class="sourceLineNo">278</span>   */<a name="line.278"></a>
-<span class="sourceLineNo">279</span>  long getFlushedCellsSize();<a name="line.279"></a>
+<span class="sourceLineNo">279</span>  long getUpdatesBlockedTime();<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>   * Get the total amount of data processed during minor compactions, in bytes.<a name="line.282"></a>
+<span class="sourceLineNo">282</span>   * Get the number of cells flushed to disk.<a name="line.282"></a>
 <span class="sourceLineNo">283</span>   */<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  long getCompactedCellsSize();<a name="line.284"></a>
+<span class="sourceLineNo">284</span>  long getFlushedCellsCount();<a name="line.284"></a>
 <span class="sourceLineNo">285</span><a name="line.285"></a>
 <span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Get the total amount of data processed during major compactions, in bytes.<a name="line.287"></a>
+<span class="sourceLineNo">287</span>   * Get the number of cells processed during minor compactions.<a name="line.287"></a>
 <span class="sourceLineNo">288</span>   */<a name="line.288"></a>
-<span class="sourceLineNo">289</span>  long getMajorCompactedCellsSize();<a name="line.289"></a>
+<span class="sourceLineNo">289</span>  long getCompactedCellsCount();<a name="line.289"></a>
 <span class="sourceLineNo">290</span><a name="line.290"></a>
 <span class="sourceLineNo">291</span>  /**<a name="line.291"></a>
-<span class="sourceLineNo">292</span>   * Gets the number of cells moved to mob during compaction.<a name="line.292"></a>
+<span class="sourceLineNo">292</span>   * Get the number of cells processed during major compactions.<a name="line.292"></a>
 <span class="sourceLineNo">293</span>   */<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  long getCellsCountCompactedToMob();<a name="line.294"></a>
+<span class="sourceLineNo">294</span>  long getMajorCompactedCellsCount();<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>   * Gets the number of cells moved from mob during compaction.<a name="line.297"></a>
+<span class="sourceLineNo">297</span>   * Get the total amount of data flushed to disk, in bytes.<a name="line.297"></a>
 <span class="sourceLineNo">298</span>   */<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  long getCellsCountCompactedFromMob();<a name="line.299"></a>
+<span class="sourceLineNo">299</span>  long getFlushedCellsSize();<a name="line.299"></a>
 <span class="sourceLineNo">300</span><a name="line.300"></a>
 <span class="sourceLineNo">301</span>  /**<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * Gets the total amount of cells moved to mob during compaction, in bytes.<a name="line.302"></a>
+<span class="sourceLineNo">302</span>   * Get the total amount of data processed during minor compactions, in bytes.<a name="line.302"></a>
 <span class="sourceLineNo">303</span>   */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  long getCellsSizeCompactedToMob();<a name="line.304"></a>
+<span class="sourceLineNo">304</span>  long getCompactedCellsSize();<a name="line.304"></a>
 <span class="sourceLineNo">305</span><a name="line.305"></a>
 <span class="sourceLineNo">306</span>  /**<a name="line.306"></a>
-<span class="sourceLineNo">307</span>   * Gets the total amount of cells moved from mob during compaction, in bytes.<a name="line.307"></a>
+<span class="sourceLineNo">307</span>   * Get the total amount of data processed during major compactions, in bytes.<a name="line.307"></a>
 <span class="sourceLineNo">308</span>   */<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  long getCellsSizeCompactedFromMob();<a name="line.309"></a>
+<span class="sourceLineNo">309</span>  long getMajorCompactedCellsSize();<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>   * Gets the number of the flushes in mob-enabled stores.<a name="line.312"></a>
+<span class="sourceLineNo">312</span>   * Gets the number of cells moved to mob during compaction.<a name="line.312"></a>
 <span class="sourceLineNo">313</span>   */<a name="line.313"></a>
-<span class="sourceLineNo">314</span>  long getMobFlushCount();<a name="line.314"></a>
+<span class="sourceLineNo">314</span>  long getCellsCountCompactedToMob();<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>   * Gets the number of mob cells flushed to disk.<a name="line.317"></a>
+<span class="sourceLineNo">317</span>   * Gets the number of cells moved from mob during compaction.<a name="line.317"></a>
 <span class="sourceLineNo">318</span>   */<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  long getMobFlushedCellsCount();<a name="line.319"></a>
+<span class="sourceLineNo">319</span>  long getCellsCountCompactedFromMob();<a name="line.319"></a>
 <span class="sourceLineNo">320</span><a name="line.320"></a>
 <span class="sourceLineNo">321</span>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Gets the total amount of mob cells flushed to disk, in bytes.<a name="line.322"></a>
+<span class="sourceLineNo">322</span>   * Gets the total amount of cells moved to mob during compaction, in bytes.<a name="line.322"></a>
 <span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  long getMobFlushedCellsSize();<a name="line.324"></a>
+<span class="sourceLineNo">324</span>  long getCellsSizeCompactedToMob();<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>   * Gets the number of scanned mob cells.<a name="line.327"></a>
+<span class="sourceLineNo">327</span>   * Gets the total amount of cells moved from mob during compaction, in bytes.<a name="line.327"></a>
 <span class="sourceLineNo">328</span>   */<a name="line.328"></a>
-<span class="sourceLineNo">329</span>  long getMobScanCellsCount();<a name="line.329"></a>
+<span class="sourceLineNo">329</span>  long getCellsSizeCompactedFromMob();<a name="line.329"></a>
 <span class="sourceLineNo">330</span><a name="line.330"></a>
 <span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * Gets the total amount of scanned mob cells, in bytes.<a name="line.332"></a>
+<span class="sourceLineNo">332</span>   * Gets the number of the flushes in mob-enabled stores.<a name="line.332"></a>
 <span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  long getMobScanCellsSize();<a name="line.334"></a>
+<span class="sourceLineNo">334</span>  long getMobFlushCount();<a name="line.334"></a>
 <span class="sourceLineNo">335</span><a name="line.335"></a>
 <span class="sourceLineNo">336</span>  /**<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   * Gets the count of accesses to the mob file cache.<a name="line.337"></a>
+<span class="sourceLineNo">337</span>   * Gets the number of mob cells flushed to disk.<a name="line.337"></a>
 <span class="sourceLineNo">338</span>   */<a name="line.338"></a>
-<span class="sourceLineNo">339</span>  long getMobFileCacheAccessCount();<a name="line.339"></a>
+<span class="sourceLineNo">339</span>  long getMobFlushedCellsCount();<a name="line.339"></a>
 <span class="sourceLineNo">340</span><a name="line.340"></a>
 <span class="sourceLineNo">341</span>  /**<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * Gets the count of misses to the mob file cache.<a name="line.342"></a>
+<span class="sourceLineNo">342</span>   * Gets the total amount of mob cells flushed to disk, in bytes.<a name="line.342"></a>
 <span class="sourceLineNo">343</span>   */<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  long getMobFileCacheMissCount();<a name="line.344"></a>
+<span class="sourceLineNo">344</span>  long getMobFlushedCellsSize();<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>   * Gets the number of items evicted from the mob file cache.<a name="line.347"></a>
+<span class="sourceLineNo">347</span>   * Gets the number of scanned mob cells.<a name="line.347"></a>
 <span class="sourceLineNo">348</span>   */<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  long getMobFileCacheEvictedCount();<a name="line.349"></a>
+<span class="sourceLineNo">349</span>  long getMobScanCellsCount();<a name="line.349"></a>
 <span class="sourceLineNo">350</span><a name="line.350"></a>
 <span class="sourceLineNo">351</span>  /**<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * Gets the count of cached mob files.<a name="line.352"></a>
+<span class="sourceLineNo">352</span>   * Gets the total amount of scanned mob cells, in bytes.<a name="line.352"></a>
 <span class="sourceLineNo">353</span>   */<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  long getMobFileCacheCount();<a name="line.354"></a>
+<span class="sourceLineNo">354</span>  long getMobScanCellsSize();<a name="line.354"></a>
 <span class="sourceLineNo">355</span><a name="line.355"></a>
 <span class="sourceLineNo">356</span>  /**<a name="line.356"></a>
-<span class="sourceLineNo">357</span>   * Gets the hit percent to the mob file cache.<a name="line.357"></a>
+<span class="sourceLineNo">357</span>   * Gets the count of accesses to the mob file cache.<a name="line.357"></a>
 <span class="sourceLineNo">358</span>   */<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  double getMobFileCacheHitPercent();<a name="line.359"></a>
+<span class="sourceLineNo">359</span>  long getMobFileCacheAccessCount();<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>   * @return Count of hedged read operations<a name="line.362"></a>
+<span class="sourceLineNo">362</span>   * Gets the count of misses to the mob file cache.<a name="line.362"></a>
 <span class="sourceLineNo">363</span>   */<a name="line.363"></a>
-<span class="sourceLineNo">364</span>  long getHedgedReadOps();<a name="line.364"></a>
+<span class="sourceLineNo">364</span>  long getMobFileCacheMissCount();<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>   * @return Count of times a hedged read beat out the primary read.<a name="line.367"></a>
+<span class="sourceLineNo">367</span>   * Gets the number of items evicted from the mob file cache.<a name="line.367"></a>
 <span class="sourceLineNo">368</span>   */<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  long getHedgedReadWins();<a name="line.369"></a>
+<span class="sourceLineNo">369</span>  long getMobFileCacheEvictedCount();<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>   * @return Count of requests blocked because the memstore size is larger than blockingMemStoreSize<a name="line.372"></a>
+<span class="sourceLineNo">372</span>   * Gets the count of cached mob files.<a name="line.372"></a>
 <span class="sourceLineNo">373</span>   */<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  long getBlockedRequestsCount();<a name="line.374"></a>
+<span class="sourceLineNo">374</span>  long getMobFileCacheCount();<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>   * Get the number of rpc get requests to this region server.<a name="line.377"></a>
+<span class="sourceLineNo">377</span>   * Gets the hit percent to the mob file cache.<a name="line.377"></a>
 <span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  long getRpcGetRequestsCount();<a name="line.379"></a>
+<span class="sourceLineNo">379</span>  double getMobFileCacheHitPercent();<a name="line.379"></a>
 <span class="sourceLineNo">380</span><a name="line.380"></a>
 <span class="sourceLineNo">381</span>  /**<a name="line.381"></a>
-<span class="sourceLineNo">382</span>   * Get the number of rpc scan requests to this region server.<a name="line.382"></a>
+<span class="sourceLineNo">382</span>   * @return Count of hedged read operations<a name="line.382"></a>
 <span class="sourceLineNo">383</span>   */<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  long getRpcScanRequestsCount();<a name="line.384"></a>
+<span class="sourceLineNo">384</span>  long getHedgedReadOps();<a name="line.384"></a>
 <span class="sourceLineNo">385</span><a name="line.385"></a>
 <span class="sourceLineNo">386</span>  /**<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   * Get the number of rpc multi requests to this region server.<a name="line.387"></a>
+<span class="sourceLineNo">387</span>   * @return Count of times a hedged read beat out the primary read.<a name="line.387"></a>
 <span class="sourceLineNo">388</span>   */<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  long getRpcMultiRequestsCount();<a name="line.389"></a>
+<span class="sourceLineNo">389</span>  long getHedgedReadWins();<a name="line.389"></a>
 <span class="sourceLineNo">390</span><a name="line.390"></a>
 <span class="sourceLineNo">391</span>  /**<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * Get the number of rpc mutate requests to this region server.<a name="line.392"></a>
+<span class="sourceLineNo">392</span>   * @return Count of requests blocked because the memstore size is larger than blockingMemStoreSize<a name="line.392"></a>
 <span class="sourceLineNo">393</span>   */<a name="line.393"></a>
-<span class="sourceLineNo">394</span>  long getRpcMutateRequestsCount();<a name="line.394"></a>
-<span class="sourceLineNo">395</span>}<a name="line.395"></a>
+<span class="sourceLineNo">394</span>  long getBlockedRequestsCount();<a name="line.394"></a>
+<span class="sourceLineNo">395</span><a name="line.395"></a>
+<span class="sourceLineNo">396</span>  /**<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   * Get the number of rpc get requests to this region server.<a name="line.397"></a>
+<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  long getRpcGetRequestsCount();<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>   * Get the number of rpc scan requests to this region server.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
+<span class="sourceLineNo">404</span>  long getRpcScanRequestsCount();<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>   * Get the number of rpc multi requests to this region server.<a name="line.407"></a>
+<span class="sourceLineNo">408</span>   */<a name="line.408"></a>
+<span class="sourceLineNo">409</span>  long getRpcMultiRequestsCount();<a name="line.409"></a>
+<span class="sourceLineNo">410</span><a name="line.410"></a>
+<span class="sourceLineNo">411</span>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * Get the number of rpc mutate requests to this region server.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  long getRpcMutateRequestsCount();<a name="line.414"></a>
+<span class="sourceLineNo">415</span>}<a name="line.415"></a>
 
 
 


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html
index 26db741..1365c97 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1779">StoreFile.Comparators.GetBulkTime</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1786">StoreFile.Comparators.GetBulkTime</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 com.google.common.base.Function&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</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;</pre>
 </li>
@@ -182,7 +182,7 @@ implements com.google.common.base.Function&lt;<a href="../../../../../org/apache
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFile.Comparators.GetBulkTime</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html#line.1779">StoreFile.Comparators.GetBulkTime</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html#line.1786">StoreFile.Comparators.GetBulkTime</a>()</pre>
 </li>
 </ul>
 </li>
@@ -199,7 +199,7 @@ implements com.google.common.base.Function&lt;<a href="../../../../../org/apache
 <ul class="blockListLast">
 <li class="blockList">
 <h4>apply</h4>
-<pre>public&nbsp;<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/regionserver/StoreFile.Comparators.GetBulkTime.html#line.1781">apply</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&nbsp;sf)</pre>
+<pre>public&nbsp;<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/regionserver/StoreFile.Comparators.GetBulkTime.html#line.1788">apply</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&nbsp;sf)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>apply</code>&nbsp;in interface&nbsp;<code>com.google.common.base.Function&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</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></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html
index fa8b36a..08e59bc 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1766">StoreFile.Comparators.GetFileSize</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1773">StoreFile.Comparators.GetFileSize</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 com.google.common.base.Function&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</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;</pre>
 </li>
@@ -182,7 +182,7 @@ implements com.google.common.base.Function&lt;<a href="../../../../../org/apache
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFile.Comparators.GetFileSize</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html#line.1766">StoreFile.Comparators.GetFileSize</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetFileSize.html#line.1773">StoreFile.Comparators.GetFileSize</a>()</pre>
 </li>
 </ul>
 </li>
@@ -199,7 +199,7 @@ implements com.google.common.base.Function&lt;<a href="../../../../../org/apache
 <ul class="blockListLast">
 <li class="blockList">
 <h4>apply</h4>
-<pre>public&nbsp;<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/regionserver/StoreFile.Comparators.GetFileSize.html#line.1768">apply</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&nbsp;sf)</pre>
+<pre>public&nbsp;<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/regionserver/StoreFile.Comparators.GetFileSize.html#line.1775">apply</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&nbsp;sf)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>apply</code>&nbsp;in interface&nbsp;<code>com.google.common.base.Function&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</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></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html
index 61fb213..1918bf3 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1787">StoreFile.Comparators.GetPathName</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1794">StoreFile.Comparators.GetPathName</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 com.google.common.base.Function&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</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>&gt;</pre>
 </li>
@@ -182,7 +182,7 @@ implements com.google.common.base.Function&lt;<a href="../../../../../org/apache
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFile.Comparators.GetPathName</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html#line.1787">StoreFile.Comparators.GetPathName</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html#line.1794">StoreFile.Comparators.GetPathName</a>()</pre>
 </li>
 </ul>
 </li>
@@ -199,7 +199,7 @@ implements com.google.common.base.Function&lt;<a href="../../../../../org/apache
 <ul class="blockListLast">
 <li class="blockList">
 <h4>apply</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/regionserver/StoreFile.Comparators.GetPathName.html#line.1789">apply</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&nbsp;sf)</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/regionserver/StoreFile.Comparators.GetPathName.html#line.1796">apply</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&nbsp;sf)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>apply</code>&nbsp;in interface&nbsp;<code>com.google.common.base.Function&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</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>&gt;</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html
index dc8852b..65e829c 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1759">StoreFile.Comparators.GetSeqId</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1766">StoreFile.Comparators.GetSeqId</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 com.google.common.base.Function&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</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;</pre>
 </li>
@@ -182,7 +182,7 @@ implements com.google.common.base.Function&lt;<a href="../../../../../org/apache
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFile.Comparators.GetSeqId</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html#line.1759">StoreFile.Comparators.GetSeqId</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetSeqId.html#line.1766">StoreFile.Comparators.GetSeqId</a>()</pre>
 </li>
 </ul>
 </li>
@@ -199,7 +199,7 @@ implements com.google.common.base.Function&lt;<a href="../../../../../org/apache
 <ul class="blockListLast">
 <li class="blockList">
 <h4>apply</h4>
-<pre>public&nbsp;<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/regionserver/StoreFile.Comparators.GetSeqId.html#line.1761">apply</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&nbsp;sf)</pre>
+<pre>public&nbsp;<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/regionserver/StoreFile.Comparators.GetSeqId.html#line.1768">apply</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&nbsp;sf)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code>apply</code>&nbsp;in interface&nbsp;<code>com.google.common.base.Function&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</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></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html
index 91187d6..7673989 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.1742">StoreFile.Comparators</a>
+<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.1749">StoreFile.Comparators</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">Useful comparators for comparing StoreFiles.</div>
 </li>
@@ -211,7 +211,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SEQ_ID</h4>
-<pre>public static final&nbsp;<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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1751">SEQ_ID</a></pre>
+<pre>public static final&nbsp;<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/regionserver/StoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFile</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1758">SEQ_ID</a></pre>
 <div class="block">Comparator that compares based on the Sequence Ids of the
  the StoreFiles. Bulk loads that did not request a seq ID
  are given a seq id of -1; thus, they are placed before all non-
@@ -234,7 +234,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFile.Comparators</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1742">StoreFile.Comparators</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html#line.1749">StoreFile.Comparators</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html
index 537668c..73c92e7 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.1148">StoreFile.Reader</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html#line.1155">StoreFile.Reader</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">Reader for a StoreFile.</div>
 </li>
@@ -496,7 +496,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/StoreFile.Reader.html#line.1149">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1156">LOG</a></pre>
 </li>
 </ul>
 <a name="generalBloomFilter">
@@ -505,7 +505,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>generalBloomFilter</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1151">generalBloomFilter</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1158">generalBloomFilter</a></pre>
 </li>
 </ul>
 <a name="deleteFamilyBloomFilter">
@@ -514,7 +514,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteFamilyBloomFilter</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1152">deleteFamilyBloomFilter</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1159">deleteFamilyBloomFilter</a></pre>
 </li>
 </ul>
 <a name="bloomFilterType">
@@ -523,7 +523,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>bloomFilterType</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1153">bloomFilterType</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1160">bloomFilterType</a></pre>
 </li>
 </ul>
 <a name="reader">
@@ -532,7 +532,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>reader</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFile.Reader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFile.Reader</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1154">reader</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFile.Reader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFile.Reader</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1161">reader</a></pre>
 </li>
 </ul>
 <a name="timeRangeTracker">
@@ -541,7 +541,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>timeRangeTracker</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TimeRangeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1155">timeRangeTracker</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.html" title="class in org.apache.hadoop.hbase.regionserver">TimeRangeTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1162">timeRangeTracker</a></pre>
 </li>
 </ul>
 <a name="sequenceID">
@@ -550,7 +550,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sequenceID</h4>
-<pre>protected&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1156">sequenceID</a></pre>
+<pre>protected&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1163">sequenceID</a></pre>
 </li>
 </ul>
 <a name="lastBloomKey">
@@ -559,7 +559,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>lastBloomKey</h4>
-<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1157">lastBloomKey</a></pre>
+<pre>private&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1164">lastBloomKey</a></pre>
 </li>
 </ul>
 <a name="deleteFamilyCnt">
@@ -568,7 +568,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>deleteFamilyCnt</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1158">deleteFamilyCnt</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1165">deleteFamilyCnt</a></pre>
 </li>
 </ul>
 <a name="bulkLoadResult">
@@ -577,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>bulkLoadResult</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1159">bulkLoadResult</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1166">bulkLoadResult</a></pre>
 </li>
 </ul>
 <a name="lastBloomKeyOnlyKV">
@@ -586,7 +586,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>lastBloomKeyOnlyKV</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue.KeyOnlyKeyValue</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1160">lastBloomKeyOnlyKV</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/KeyValue.KeyOnlyKeyValue.html" title="class in org.apache.hadoop.hbase">KeyValue.KeyOnlyKeyValue</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1167">lastBloomKeyOnlyKV</a></pre>
 </li>
 </ul>
 <a name="skipResetSeqId">
@@ -595,7 +595,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>skipResetSeqId</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1161">skipResetSeqId</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1168">skipResetSeqId</a></pre>
 </li>
 </ul>
 <a name="refCount">
@@ -604,7 +604,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>refCount</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1165">refCount</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1172">refCount</a></pre>
 </li>
 </ul>
 <a name="compactedAway">
@@ -613,7 +613,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>compactedAway</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1167">compactedAway</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1174">compactedAway</a></pre>
 </li>
 </ul>
 </li>
@@ -630,7 +630,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreFile.Reader</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1169">StoreFile.Reader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1176">StoreFile.Reader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                 org.apache.hadoop.fs.Path&nbsp;path,
                 <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;cacheConf,
                 org.apache.hadoop.conf.Configuration&nbsp;conf)
@@ -645,7 +645,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>StoreFile.Reader</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1179">StoreFile.Reader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1186">StoreFile.Reader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                 org.apache.hadoop.fs.Path&nbsp;path,
                 <a href="../../../../../org/apache/hadoop/hbase/io/FSDataInputStreamWrapper.html" title="class in org.apache.hadoop.hbase.io">FSDataInputStreamWrapper</a>&nbsp;in,
                 long&nbsp;size,
@@ -662,7 +662,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>StoreFile.Reader</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1195">StoreFile.Reader</a>()</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1202">StoreFile.Reader</a>()</pre>
 <div class="block">ONLY USE DEFAULT CONSTRUCTOR FOR UNIT TESTS</div>
 </li>
 </ul>
@@ -680,7 +680,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>markCompactedAway</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1175">markCompactedAway</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1182">markCompactedAway</a>()</pre>
 </li>
 </ul>
 <a name="setReplicaStoreFile(boolean)">
@@ -689,7 +689,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setReplicaStoreFile</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1185">setReplicaStoreFile</a>(boolean&nbsp;isPrimaryReplicaStoreFile)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1192">setReplicaStoreFile</a>(boolean&nbsp;isPrimaryReplicaStoreFile)</pre>
 </li>
 </ul>
 <a name="isPrimaryReplicaReader()">
@@ -698,7 +698,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isPrimaryReplicaReader</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1188">isPrimaryReplicaReader</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1195">isPrimaryReplicaReader</a>()</pre>
 </li>
 </ul>
 <a name="getComparator()">
@@ -707,7 +707,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getComparator</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/StoreFile.Reader.html#line.1199">getComparator</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/StoreFile.Reader.html#line.1206">getComparator</a>()</pre>
 </li>
 </ul>
 <a name="getStoreFileScanner(boolean, boolean)">
@@ -716,7 +716,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFileScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1211">getStoreFileScanner</a>(boolean&nbsp;cacheBlocks,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1218">getStoreFileScanner</a>(boolean&nbsp;cacheBlocks,
                                    boolean&nbsp;pread)</pre>
 <div class="block">Get a scanner to scan over this StoreFile. Do not use
  this overload if using this scanner for compactions.</div>
@@ -730,7 +730,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFileScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1227">getStoreFileScanner</a>(boolean&nbsp;cacheBlocks,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreFileScanner.html" title="class in org.apache.hadoop.hbase.regionserver">StoreFileScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1234">getStoreFileScanner</a>(boolean&nbsp;cacheBlocks,
                                    boolean&nbsp;pread,
                                    boolean&nbsp;isCompaction,
                                    long&nbsp;readPt)</pre>
@@ -745,7 +745,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>decrementRefCount</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1241">decrementRefCount</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1248">decrementRefCount</a>()</pre>
 <div class="block">Decrement the ref count associated with the reader when ever a scanner associated
  with the reader is closed</div>
 </li>
@@ -756,7 +756,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isReferencedInReads</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1248">isReferencedInReads</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1255">isReferencedInReads</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if the file is still used in reads</dd></dl>
 </li>
 </ul>
@@ -766,7 +766,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isCompactedAway</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1255">isCompactedAway</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1262">isCompactedAway</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if the file is compacted</dd></dl>
 </li>
 </ul>
@@ -777,7 +777,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <li class="blockList">
 <h4>getScanner</h4>
 <pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1269">getScanner</a>(boolean&nbsp;cacheBlocks,
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1276">getScanner</a>(boolean&nbsp;cacheBlocks,
                                  boolean&nbsp;pread)</pre>
 <div class="block"><span class="strong">Deprecated.</span>&nbsp;</div>
 <div class="block">Warning: Do not write further code which depends on this call. Instead
@@ -794,7 +794,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <li class="blockList">
 <h4>getScanner</h4>
 <pre><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1287">getScanner</a>(boolean&nbsp;cacheBlocks,
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanner.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1294">getScanner</a>(boolean&nbsp;cacheBlocks,
                                  boolean&nbsp;pread,
                                  boolean&nbsp;isCompaction)</pre>
 <div class="block"><span class="strong">Deprecated.</span>&nbsp;</div>
@@ -811,7 +811,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1292">close</a>(boolean&nbsp;evictOnClose)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1299">close</a>(boolean&nbsp;evictOnClose)
            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>
@@ -823,7 +823,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>passesTimerangeFilter</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1304">passesTimerangeFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;timeRange,
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1311">passesTimerangeFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/io/TimeRange.html" title="class in org.apache.hadoop.hbase.io">TimeRange</a>&nbsp;timeRange,
                             long&nbsp;oldestUnexpiredTS)</pre>
 <div class="block">Check if this storeFile may contain keys within the TimeRange that
  have not expired (i.e. not older than oldestUnexpiredTS).</div>
@@ -838,7 +838,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>passesBloomFilter</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1329">passesBloomFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1336">passesBloomFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                         <a href="http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;byte[]&gt;&nbsp;columns)</pre>
 <div class="block">Checks whether the given scan passes the Bloom filter (if present). Only
  checks Bloom filters for single-row or single-row-column scans. Bloom
@@ -860,7 +860,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>passesDeleteFamilyBloomFilter</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1361">passesDeleteFamilyBloomFilter</a>(byte[]&nbsp;row,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1368">passesDeleteFamilyBloomFilter</a>(byte[]&nbsp;row,
                                     int&nbsp;rowOffset,
                                     int&nbsp;rowLen)</pre>
 </li>
@@ -871,7 +871,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>passesGeneralRowBloomFilter</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1399">passesGeneralRowBloomFilter</a>(byte[]&nbsp;row,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1406">passesGeneralRowBloomFilter</a>(byte[]&nbsp;row,
                                   int&nbsp;rowOffset,
                                   int&nbsp;rowLen)</pre>
 <div class="block">A method for checking Bloom filters. Called directly from
@@ -886,7 +886,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>passesGeneralRowColBloomFilter</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1423">passesGeneralRowColBloomFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1430">passesGeneralRowColBloomFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <div class="block">A method for checking Bloom filters. Called directly from
  StoreFileScanner in case of a multi-column query.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>cell</code> - the cell to check if present in BloomFilter</dd>
@@ -899,7 +899,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>checkGeneralBloomFilter</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1439">checkGeneralBloomFilter</a>(byte[]&nbsp;key,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1446">checkGeneralBloomFilter</a>(byte[]&nbsp;key,
                               <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;kvKey,
                               <a href="../../../../../org/apache/hadoop/hbase/util/BloomFilter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilter</a>&nbsp;bloomFilter)</pre>
 </li>
@@ -910,7 +910,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>passesKeyRangeFilter</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1515">passesKeyRangeFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1522">passesKeyRangeFilter</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</pre>
 <div class="block">Checks whether the given scan rowkey range overlaps with the current storefile's</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>scan</code> - the scan specification. Used to determine the rowkey range.</dd>
 <dt><span class="strong">Returns:</span></dt><dd>true if there is overlap, false otherwise</dd></dl>
@@ -922,7 +922,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>loadFileInfo</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[],byte[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1537">loadFileInfo</a>()
+<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[],byte[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1544">loadFileInfo</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>
@@ -934,7 +934,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>loadBloomfilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1557">loadBloomfilter</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1564">loadBloomfilter</a>()</pre>
 </li>
 </ul>
 <a name="loadBloomfilter(org.apache.hadoop.hbase.io.hfile.BlockType)">
@@ -943,7 +943,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>loadBloomfilter</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1562">loadBloomfilter</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType</a>&nbsp;blockType)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1569">loadBloomfilter</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType</a>&nbsp;blockType)</pre>
 </li>
 </ul>
 <a name="setBloomFilterFaulty(org.apache.hadoop.hbase.io.hfile.BlockType)">
@@ -952,7 +952,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>setBloomFilterFaulty</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1611">setBloomFilterFaulty</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType</a>&nbsp;blockType)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1618">setBloomFilterFaulty</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType</a>&nbsp;blockType)</pre>
 </li>
 </ul>
 <a name="getFilterEntries()">
@@ -961,7 +961,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilterEntries</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1626">getFilterEntries</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1633">getFilterEntries</a>()</pre>
 <div class="block">The number of Bloom filter entries in this store file, or an estimate
  thereof, if the Bloom filter is not loaded. This always returns an upper
  bound of the number of Bloom filter entries.</div>
@@ -974,7 +974,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>setGeneralBloomFilterFaulty</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1631">setGeneralBloomFilterFaulty</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1638">setGeneralBloomFilterFaulty</a>()</pre>
 </li>
 </ul>
 <a name="setDeleteFamilyBloomFilterFaulty()">
@@ -983,7 +983,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>setDeleteFamilyBloomFilterFaulty</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1635">setDeleteFamilyBloomFilterFaulty</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1642">setDeleteFamilyBloomFilterFaulty</a>()</pre>
 </li>
 </ul>
 <a name="getLastKey()">
@@ -992,7 +992,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastKey</h4>
-<pre>public&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/StoreFile.Reader.html#line.1639">getLastKey</a>()</pre>
+<pre>public&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/StoreFile.Reader.html#line.1646">getLastKey</a>()</pre>
 </li>
 </ul>
 <a name="getLastRowKey()">
@@ -1001,7 +1001,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getLastRowKey</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1643">getLastRowKey</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1650">getLastRowKey</a>()</pre>
 </li>
 </ul>
 <a name="midkey()">
@@ -1010,7 +1010,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>midkey</h4>
-<pre>public&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/StoreFile.Reader.html#line.1647">midkey</a>()
+<pre>public&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/StoreFile.Reader.html#line.1654">midkey</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>
@@ -1022,7 +1022,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>length</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1651">length</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1658">length</a>()</pre>
 </li>
 </ul>
 <a name="getTotalUncompressedBytes()">
@@ -1031,7 +1031,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalUncompressedBytes</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1655">getTotalUncompressedBytes</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1662">getTotalUncompressedBytes</a>()</pre>
 </li>
 </ul>
 <a name="getEntries()">
@@ -1040,7 +1040,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getEntries</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1659">getEntries</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1666">getEntries</a>()</pre>
 </li>
 </ul>
 <a name="getDeleteFamilyCnt()">
@@ -1049,7 +1049,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getDeleteFamilyCnt</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1663">getDeleteFamilyCnt</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1670">getDeleteFamilyCnt</a>()</pre>
 </li>
 </ul>
 <a name="getFirstKey()">
@@ -1058,7 +1058,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getFirstKey</h4>
-<pre>public&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/StoreFile.Reader.html#line.1667">getFirstKey</a>()</pre>
+<pre>public&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/StoreFile.Reader.html#line.1674">getFirstKey</a>()</pre>
 </li>
 </ul>
 <a name="indexSize()">
@@ -1067,7 +1067,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>indexSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1671">indexSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1678">indexSize</a>()</pre>
 </li>
 </ul>
 <a name="getBloomFilterType()">
@@ -1076,7 +1076,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getBloomFilterType</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1675">getBloomFilterType</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver">BloomType</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1682">getBloomFilterType</a>()</pre>
 </li>
 </ul>
 <a name="getSequenceID()">
@@ -1085,7 +1085,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getSequenceID</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1679">getSequenceID</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1686">getSequenceID</a>()</pre>
 </li>
 </ul>
 <a name="setSequenceID(long)">
@@ -1094,7 +1094,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>setSequenceID</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1683">setSequenceID</a>(long&nbsp;sequenceID)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1690">setSequenceID</a>(long&nbsp;sequenceID)</pre>
 </li>
 </ul>
 <a name="setBulkLoaded(boolean)">
@@ -1103,7 +1103,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>setBulkLoaded</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1687">setBulkLoaded</a>(boolean&nbsp;bulkLoadResult)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1694">setBulkLoaded</a>(boolean&nbsp;bulkLoadResult)</pre>
 </li>
 </ul>
 <a name="isBulkLoaded()">
@@ -1112,7 +1112,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>isBulkLoaded</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1691">isBulkLoaded</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1698">isBulkLoaded</a>()</pre>
 </li>
 </ul>
 <a name="getGeneralBloomFilter()">
@@ -1121,7 +1121,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getGeneralBloomFilter</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/util/BloomFilter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1695">getGeneralBloomFilter</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/util/BloomFilter.html" title="interface in org.apache.hadoop.hbase.util">BloomFilter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1702">getGeneralBloomFilter</a>()</pre>
 </li>
 </ul>
 <a name="getUncompressedDataIndexSize()">
@@ -1130,7 +1130,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getUncompressedDataIndexSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1699">getUncompressedDataIndexSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1706">getUncompressedDataIndexSize</a>()</pre>
 </li>
 </ul>
 <a name="getTotalBloomSize()">
@@ -1139,7 +1139,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalBloomSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1703">getTotalBloomSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1710">getTotalBloomSize</a>()</pre>
 </li>
 </ul>
 <a name="getHFileVersion()">
@@ -1148,7 +1148,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFileVersion</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1709">getHFileVersion</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1716">getHFileVersion</a>()</pre>
 </li>
 </ul>
 <a name="getHFileMinorVersion()">
@@ -1157,7 +1157,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFileMinorVersion</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1713">getHFileMinorVersion</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1720">getHFileMinorVersion</a>()</pre>
 </li>
 </ul>
 <a name="getHFileReader()">
@@ -1166,7 +1166,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getHFileReader</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFile.Reader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1717">getHFileReader</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFile.Reader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFile.Reader</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1724">getHFileReader</a>()</pre>
 </li>
 </ul>
 <a name="disableBloomFilterForTesting()">
@@ -1175,7 +1175,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>disableBloomFilterForTesting</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1721">disableBloomFilterForTesting</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1728">disableBloomFilterForTesting</a>()</pre>
 </li>
 </ul>
 <a name="getMaxTimestamp()">
@@ -1184,7 +1184,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxTimestamp</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1726">getMaxTimestamp</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1733">getMaxTimestamp</a>()</pre>
 </li>
 </ul>
 <a name="isSkipResetSeqId()">
@@ -1193,7 +1193,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockList">
 <li class="blockList">
 <h4>isSkipResetSeqId</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1730">isSkipResetSeqId</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1737">isSkipResetSeqId</a>()</pre>
 </li>
 </ul>
 <a name="setSkipResetSeqId(boolean)">
@@ -1202,7 +1202,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/HFileScanne
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setSkipResetSeqId</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1734">setSkipResetSeqId</a>(boolean&nbsp;skipResetSeqId)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Reader.html#line.1741">setSkipResetSeqId</a>(boolean&nbsp;skipResetSeqId)</pre>
 </li>
 </ul>
 </li>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html
index 93d53f5..9b6511c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html
@@ -305,7 +305,7 @@
 <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>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (!scopes.isEmpty()) {<a name="line.300"></a>
+<span class="sourceLineNo">300</span>    if (!scopes.isEmpty() &amp;&amp; !logEdit.isReplay()) {<a name="line.300"></a>
 <span class="sourceLineNo">301</span>      logKey.setScopes(scopes);<a name="line.301"></a>
 <span class="sourceLineNo">302</span>    }<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  }<a name="line.303"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 03e4c60..507426b 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 = "serverManager", type = "ServerManager"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.63"></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 = "format", type = "String"),<a name="line.63"></a>
 <span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&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">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.66"></a>
 <span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;")})<a name="line.70"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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,40 +116,40 @@
 <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>    // 28, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setServerManager(ServerManager serverManager)<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>      // 28, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_serverManager = serverManager;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_serverManager__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 ServerManager getServerManager()<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_serverManager;<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 ServerManager m_serverManager;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getServerManager__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_serverManager__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_serverManager__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 25, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<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>    // 27, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 25, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getCatalogJanitorEnabled()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_catalogJanitorEnabled;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_catalogJanitorEnabled;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    // 24, 1<a name="line.145"></a>
 <span class="sourceLineNo">146</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
@@ -184,23 +184,23 @@
 <span class="sourceLineNo">176</span>      return m_assignmentManager__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">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">179</span>    // 23, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 23, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_servers = servers;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_servers__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public List&lt;ServerName&gt; getServers()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_servers;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private List&lt;ServerName&gt; m_servers;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getServers__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_servers__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">195</span>    private boolean m_servers__IsNotDefault;<a name="line.195"></a>
 <span class="sourceLineNo">196</span>    // 26, 1<a name="line.196"></a>
 <span class="sourceLineNo">197</span>    public void setFilter(String filter)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
@@ -218,57 +218,57 @@
 <span class="sourceLineNo">210</span>      return m_filter__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
 <span class="sourceLineNo">212</span>    private boolean m_filter__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 22, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.214"></a>
+<span class="sourceLineNo">213</span>    // 28, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setServerManager(ServerManager serverManager)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 22, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_metaLocation = metaLocation;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_metaLocation__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 28, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_serverManager = serverManager;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_serverManager__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public ServerName getMetaLocation()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public ServerManager getServerManager()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_metaLocation;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_serverManager;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private ServerName m_metaLocation;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private ServerManager m_serverManager;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getServerManager__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_metaLocation__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_serverManager__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_serverManager__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 22, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 22, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_metaLocation = metaLocation;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_metaLocation__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public ServerName getMetaLocation()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_metaLocation;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private ServerName m_metaLocation;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_metaLocation__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 21, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_metaLocation__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>      // 21, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_frags = frags;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_frags__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 Map&lt;String,Integer&gt; getFrags()<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_frags;<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 Map&lt;String,Integer&gt; m_frags;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getFrags__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_frags__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_frags__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,17 +280,17 @@
 <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 ServerManager serverManager;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<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()).setServerManager(p_serverManager);<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 boolean catalogJanitorEnabled;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<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>
@@ -308,10 +308,10 @@
 <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>
-<span class="sourceLineNo">303</span>  protected String format;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected List&lt;ServerName&gt; servers;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setServers(p_servers);<a name="line.306"></a>
 <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>
@@ -322,24 +322,24 @@
 <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 ServerName metaLocation;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected ServerManager serverManager;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setServerManager(p_serverManager);<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 List&lt;ServerName&gt; servers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected ServerName metaLocation;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setMetaLocation(p_metaLocation);<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 Map&lt;String,Integer&gt; frags;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<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()).setFrags(p_frags);<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/f6cc9224/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 03e4c60..507426b 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 = "serverManager", type = "ServerManager"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.63"></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 = "format", type = "String"),<a name="line.63"></a>
 <span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&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">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.66"></a>
 <span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;")})<a name="line.70"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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,40 +116,40 @@
 <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>    // 28, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setServerManager(ServerManager serverManager)<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>      // 28, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_serverManager = serverManager;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_serverManager__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 ServerManager getServerManager()<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_serverManager;<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 ServerManager m_serverManager;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getServerManager__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_serverManager__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_serverManager__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 25, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<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>    // 27, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 25, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getCatalogJanitorEnabled()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_catalogJanitorEnabled;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_catalogJanitorEnabled;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    // 24, 1<a name="line.145"></a>
 <span class="sourceLineNo">146</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
@@ -184,23 +184,23 @@
 <span class="sourceLineNo">176</span>      return m_assignmentManager__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">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">179</span>    // 23, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 23, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_servers = servers;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_servers__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public List&lt;ServerName&gt; getServers()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_servers;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private List&lt;ServerName&gt; m_servers;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getServers__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_servers__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">195</span>    private boolean m_servers__IsNotDefault;<a name="line.195"></a>
 <span class="sourceLineNo">196</span>    // 26, 1<a name="line.196"></a>
 <span class="sourceLineNo">197</span>    public void setFilter(String filter)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
@@ -218,57 +218,57 @@
 <span class="sourceLineNo">210</span>      return m_filter__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
 <span class="sourceLineNo">212</span>    private boolean m_filter__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 22, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.214"></a>
+<span class="sourceLineNo">213</span>    // 28, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setServerManager(ServerManager serverManager)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 22, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_metaLocation = metaLocation;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_metaLocation__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 28, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_serverManager = serverManager;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_serverManager__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public ServerName getMetaLocation()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public ServerManager getServerManager()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_metaLocation;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_serverManager;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private ServerName m_metaLocation;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private ServerManager m_serverManager;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getServerManager__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_metaLocation__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_serverManager__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_serverManager__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 22, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 22, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_metaLocation = metaLocation;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_metaLocation__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public ServerName getMetaLocation()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_metaLocation;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private ServerName m_metaLocation;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_metaLocation__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 21, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_metaLocation__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>      // 21, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_frags = frags;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_frags__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 Map&lt;String,Integer&gt; getFrags()<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_frags;<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 Map&lt;String,Integer&gt; m_frags;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getFrags__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_frags__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_frags__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,17 +280,17 @@
 <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 ServerManager serverManager;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<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()).setServerManager(p_serverManager);<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 boolean catalogJanitorEnabled;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<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>
@@ -308,10 +308,10 @@
 <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>
-<span class="sourceLineNo">303</span>  protected String format;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected List&lt;ServerName&gt; servers;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setServers(p_servers);<a name="line.306"></a>
 <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>
@@ -322,24 +322,24 @@
 <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 ServerName metaLocation;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected ServerManager serverManager;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setServerManager(p_serverManager);<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 List&lt;ServerName&gt; servers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected ServerName metaLocation;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setMetaLocation(p_metaLocation);<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 Map&lt;String,Integer&gt; frags;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<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()).setFrags(p_frags);<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/f6cc9224/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 03e4c60..507426b 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 = "serverManager", type = "ServerManager"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.63"></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 = "format", type = "String"),<a name="line.63"></a>
 <span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&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">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.66"></a>
 <span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;")})<a name="line.70"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<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,40 +116,40 @@
 <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>    // 28, 1<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    public void setServerManager(ServerManager serverManager)<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>      // 28, 1<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      m_serverManager = serverManager;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      m_serverManager__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 ServerManager getServerManager()<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_serverManager;<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 ServerManager m_serverManager;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    public boolean getServerManager__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_serverManager__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_serverManager__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 25, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<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>    // 27, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 25, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getCatalogJanitorEnabled()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_catalogJanitorEnabled;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_catalogJanitorEnabled;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
 <span class="sourceLineNo">145</span>    // 24, 1<a name="line.145"></a>
 <span class="sourceLineNo">146</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
@@ -184,23 +184,23 @@
 <span class="sourceLineNo">176</span>      return m_assignmentManager__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">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">179</span>    // 23, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 23, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_servers = servers;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_servers__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public List&lt;ServerName&gt; getServers()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_servers;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private List&lt;ServerName&gt; m_servers;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getServers__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_servers__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">195</span>    private boolean m_servers__IsNotDefault;<a name="line.195"></a>
 <span class="sourceLineNo">196</span>    // 26, 1<a name="line.196"></a>
 <span class="sourceLineNo">197</span>    public void setFilter(String filter)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
@@ -218,57 +218,57 @@
 <span class="sourceLineNo">210</span>      return m_filter__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
 <span class="sourceLineNo">212</span>    private boolean m_filter__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 22, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.214"></a>
+<span class="sourceLineNo">213</span>    // 28, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setServerManager(ServerManager serverManager)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 22, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_metaLocation = metaLocation;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_metaLocation__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 28, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_serverManager = serverManager;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_serverManager__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public ServerName getMetaLocation()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public ServerManager getServerManager()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_metaLocation;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_serverManager;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private ServerName m_metaLocation;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private ServerManager m_serverManager;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getServerManager__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_metaLocation__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_serverManager__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 23, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_serverManager__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 22, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 23, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_servers = servers;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_servers__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 22, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_metaLocation = metaLocation;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_metaLocation__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public List&lt;ServerName&gt; getServers()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public ServerName getMetaLocation()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_servers;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_metaLocation;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private List&lt;ServerName&gt; m_servers;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getServers__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private ServerName m_metaLocation;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_servers__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_metaLocation__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_servers__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 21, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setFrags(Map&lt;String,Integer&gt; frags)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_metaLocation__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>      // 21, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_frags = frags;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_frags__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 Map&lt;String,Integer&gt; getFrags()<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_frags;<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 Map&lt;String,Integer&gt; m_frags;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getFrags__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_frags__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_frags__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,17 +280,17 @@
 <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 ServerManager serverManager;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<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()).setServerManager(p_serverManager);<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 boolean catalogJanitorEnabled;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<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>
@@ -308,10 +308,10 @@
 <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>
-<span class="sourceLineNo">303</span>  protected String format;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected List&lt;ServerName&gt; servers;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setServers(p_servers);<a name="line.306"></a>
 <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>
@@ -322,24 +322,24 @@
 <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 ServerName metaLocation;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected ServerManager serverManager;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setServerManager(p_serverManager);<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 List&lt;ServerName&gt; servers;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected ServerName metaLocation;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setServers(p_servers);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setMetaLocation(p_metaLocation);<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 Map&lt;String,Integer&gt; frags;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFrags(Map&lt;String,Integer&gt; p_frags)<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()).setFrags(p_frags);<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>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    System.err.println("   -e             Use table/regionserver as regular expressi

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html
index 0cc571b..f0d9e09 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetPathName.html
@@ -299,1507 +299,1514 @@
 <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>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @return True if this file was made by a major compaction.<a name="line.294"></a>
+<span class="sourceLineNo">294</span>   * @return True if this is HFile.<a name="line.294"></a>
 <span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public boolean isMajorCompaction() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (this.majorCompaction == null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throw new NullPointerException("This has not been set yet");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.majorCompaction.get();<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>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return True if this file should not be part of a minor compaction.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public boolean excludeFromMinorCompaction() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    return this.excludeFromMinorCompaction;<a name="line.307"></a>
+<span class="sourceLineNo">296</span>  public boolean isHFile() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.fileInfo.isHFile(this.fileInfo.getPath());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<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>   * @return True if this file was made by a major compaction.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public boolean isMajorCompaction() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    if (this.majorCompaction == null) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      throw new NullPointerException("This has not been set yet");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return this.majorCompaction.get();<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>  /**<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return This files maximum edit sequence id.<a name="line.311"></a>
+<span class="sourceLineNo">311</span>   * @return True if this file should not be part of a minor compaction.<a name="line.311"></a>
 <span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public long getMaxSequenceId() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return this.sequenceid;<a name="line.314"></a>
+<span class="sourceLineNo">313</span>  public boolean excludeFromMinorCompaction() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return this.excludeFromMinorCompaction;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Only used by the Striped Compaction Policy<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param key<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @return value associated with the metadata key<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return metadataMap.get(key);<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Return the largest memstoreTS found across all storefiles in<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * the given list. Store files that were created by a mapreduce<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * does not yet have any store files.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long max = 0;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (StoreFile sf : sfs) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!sf.isBulkLoadResult()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        max = Math.max(max, sf.getMaxMemstoreTS());<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>    return max;<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>   * Return the highest sequence ID found across all storefiles in<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * the given list.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param sfs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * does not yet have any store files.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long max = 0;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (StoreFile sf : sfs) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return max;<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>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Check if this storefile was created by bulk load.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * explicitly turned off.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @return true if this storefile was created by bulk load.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean isBulkLoadResult() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean bulkLoadedHFile = false;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    String fileName = this.getPath().getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (startPos != -1) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      bulkLoadedHFile = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @VisibleForTesting<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public boolean isCompactedAway() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (this.reader != null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return this.reader.isCompactedAway();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  @VisibleForTesting<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public int getRefCount() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return this.reader.refCount.get();<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>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Return the timestamp at which this bulk load file was generated.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public long getBulkLoadTimestamp() {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * calculated when store file is opened.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return this.fileInfo.getHDFSBlockDistribution();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return Reader for the store file.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IOException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @see #closeReader(boolean)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    if (this.reader != null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throw new IllegalAccessError("Already open");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // Open the StoreFile.Reader<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Read in our metadata.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (b != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // since store files are distinguished by sequence id, the one half would<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // subsume the other.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.sequenceid = Bytes.toLong(b);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      if (fileInfo.isTopReference()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        this.sequenceid += 1;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (isBulkLoadResult()){<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // generate the sequenceId from the fileName<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      String fileName = this.getPath().getName();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (startPos != -1) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            fileName.indexOf('_', startPos + 6)));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        // Handle reference files as done above.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (fileInfo.isTopReference()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // have the same row key but different seqIds.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      this.reader.setBulkLoaded(true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (b != null) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (b != null) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      boolean mc = Bytes.toBoolean(b);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (this.majorCompaction == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.majorCompaction.set(mc);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      this.majorCompaction = new AtomicBoolean(false);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (cfBloomType != BloomType.NONE) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (hfileBloomType != cfBloomType) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.info("HFile Bloom filter type for "<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            + "configuration");<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (timerangeBytes != null) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    } catch (IllegalArgumentException e) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          "proceeding without", e);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.reader.timeRangeTracker = null;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // initialize so we can reuse them after reader closed.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    firstKey = reader.getFirstKey();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    lastKey = reader.getLastKey();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    comparator = reader.getComparator();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.reader;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public Reader createReader() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return createReader(false);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * @return Reader for StoreFile. creates if necessary<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @throws IOException<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    if (this.reader == null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        this.reader = open(canUseDropBehind);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (IOException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        try {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          boolean evictOnClose =<a name="line.538"></a>
-<span class="sourceLineNo">539</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.539"></a>
-<span class="sourceLineNo">540</span>          this.closeReader(evictOnClose);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        } catch (IOException ee) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        throw e;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return this.reader;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<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>   * @return Current reader.  Must call createReader first else returns null.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @see #createReader()<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public Reader getReader() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this.reader;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @throws IOException<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   */<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (this.reader != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      this.reader.close(evictOnClose);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      this.reader = null;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * Marks the status of the file as compactedAway.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public void markCompactedAway() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    if (this.reader != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      this.reader.markCompactedAway();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * Delete this file<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @throws IOException<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  public void deleteReader() throws IOException {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    boolean evictOnClose =<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.585"></a>
-<span class="sourceLineNo">586</span>    closeReader(evictOnClose);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    this.fs.delete(getPath(), true);<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>  @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public String toString() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return this.fileInfo.toString();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public String toStringDetailed() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    StringBuilder sb = new StringBuilder();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    sb.append(this.getPath().toString());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    sb.append(", isReference=").append(isReference());<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (isBulkLoadResult()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return sb.toString();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @return Whether to skip resetting the sequence id.<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      justification="Will not overflow")<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  public static class WriterBuilder {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    private final Configuration conf;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final CacheConfig cacheConf;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private final FileSystem fs;<a name="line.630"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @return This files maximum edit sequence id.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public long getMaxSequenceId() {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this.sequenceid;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * Only used by the Striped Compaction Policy<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @param key<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @return value associated with the metadata key<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return metadataMap.get(key);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<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>   * Return the largest memstoreTS found across all storefiles in<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * the given list. Store files that were created by a mapreduce<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * does not yet have any store files.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    long max = 0;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (StoreFile sf : sfs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (!sf.isBulkLoadResult()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        max = Math.max(max, sf.getMaxMemstoreTS());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return max;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Return the highest sequence ID found across all storefiles in<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * the given list.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param sfs<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * does not yet have any store files.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    long max = 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    for (StoreFile sf : sfs) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return max;<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>  /**<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * Check if this storefile was created by bulk load.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * explicitly turned off.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @return true if this storefile was created by bulk load.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean isBulkLoadResult() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    boolean bulkLoadedHFile = false;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String fileName = this.getPath().getName();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (startPos != -1) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      bulkLoadedHFile = true;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @VisibleForTesting<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  public boolean isCompactedAway() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (this.reader != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return this.reader.isCompactedAway();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return true;<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>  @VisibleForTesting<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public int getRefCount() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return this.reader.refCount.get();<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 timestamp at which this bulk load file was generated.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public long getBulkLoadTimestamp() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * calculated when store file is opened.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return this.fileInfo.getHDFSBlockDistribution();<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>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return Reader for the store file.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @throws IOException<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @see #closeReader(boolean)<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (this.reader != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      throw new IllegalAccessError("Already open");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Open the StoreFile.Reader<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // Read in our metadata.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    if (b != null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // since store files are distinguished by sequence id, the one half would<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      // subsume the other.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      this.sequenceid = Bytes.toLong(b);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      if (fileInfo.isTopReference()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        this.sequenceid += 1;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (isBulkLoadResult()){<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // generate the sequenceId from the fileName<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      String fileName = this.getPath().getName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      if (startPos != -1) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            fileName.indexOf('_', startPos + 6)));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        // Handle reference files as done above.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        if (fileInfo.isTopReference()) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      // have the same row key but different seqIds.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      this.reader.setBulkLoaded(true);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (b != null) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    if (b != null) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      boolean mc = Bytes.toBoolean(b);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      if (this.majorCompaction == null) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      } else {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        this.majorCompaction.set(mc);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      this.majorCompaction = new AtomicBoolean(false);<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>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    if (cfBloomType != BloomType.NONE) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (hfileBloomType != cfBloomType) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        LOG.info("HFile Bloom filter type for "<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            + "configuration");<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (timerangeBytes != null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IllegalArgumentException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.520"></a>
+<span class="sourceLineNo">521</span>          "proceeding without", e);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      this.reader.timeRangeTracker = null;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // initialize so we can reuse them after reader closed.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    firstKey = reader.getFirstKey();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    lastKey = reader.getLastKey();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    comparator = reader.getComparator();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return this.reader;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>  public Reader createReader() throws IOException {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    return createReader(false);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>  /**<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @return Reader for StoreFile. creates if necessary<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @throws IOException<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (this.reader == null) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        this.reader = open(canUseDropBehind);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (IOException e) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        try {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          boolean evictOnClose =<a name="line.545"></a>
+<span class="sourceLineNo">546</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.546"></a>
+<span class="sourceLineNo">547</span>          this.closeReader(evictOnClose);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        } catch (IOException ee) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        throw e;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return this.reader;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * @return Current reader.  Must call createReader first else returns null.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @see #createReader()<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   */<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public Reader getReader() {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    return this.reader;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
+<span class="sourceLineNo">564</span><a name="line.564"></a>
+<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    if (this.reader != null) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.reader.close(evictOnClose);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.reader = null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<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>  /**<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * Marks the status of the file as compactedAway.<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void markCompactedAway() {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    if (this.reader != null) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.reader.markCompactedAway();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * Delete this file<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  public void deleteReader() throws IOException {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    boolean evictOnClose =<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.592"></a>
+<span class="sourceLineNo">593</span>    closeReader(evictOnClose);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    this.fs.delete(getPath(), true);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>  @Override<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  public String toString() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return this.fileInfo.toString();<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  public String toStringDetailed() {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    StringBuilder sb = new StringBuilder();<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    sb.append(this.getPath().toString());<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    sb.append(", isReference=").append(isReference());<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    if (isBulkLoadResult()) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return sb.toString();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return Whether to skip resetting the sequence id.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return false;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
 <span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    private BloomType bloomType = BloomType.NONE;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    private long maxKeyCount = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    private Path dir;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    private Path filePath;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    private InetSocketAddress[] favoredNodes;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    private HFileContext fileContext;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        FileSystem fs) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      this.conf = conf;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.cacheConf = cacheConf;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      this.fs = fs;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    }<a name="line.645"></a>
+<span class="sourceLineNo">632</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      justification="Will not overflow")<a name="line.633"></a>
+<span class="sourceLineNo">634</span>  public static class WriterBuilder {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    private final Configuration conf;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    private final CacheConfig cacheConf;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    private final FileSystem fs;<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    private BloomType bloomType = BloomType.NONE;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    private long maxKeyCount = 0;<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    private Path dir;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    private Path filePath;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    private InetSocketAddress[] favoredNodes;<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    private HFileContext fileContext;<a name="line.645"></a>
 <span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * @param dir Path to column family directory. The directory is created if<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *          does not exist. The file is given a unique name within this<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     *          directory.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     * @return this (for chained invocation)<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      Preconditions.checkNotNull(dir);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.dir = dir;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return this;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @param filePath the StoreFile path to write<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * @return this (for chained invocation)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     */<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      Preconditions.checkNotNull(filePath);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      this.filePath = filePath;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      return this;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    /**<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     * @return this (for chained invocation)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      this.favoredNodes = favoredNodes;<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      return this;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      Preconditions.checkNotNull(comparator);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      this.comparator = comparator;<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      return this;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      Preconditions.checkNotNull(bloomType);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      this.bloomType = bloomType;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      return this;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>    /**<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * @return this (for chained invocation)<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      this.maxKeyCount = maxKeyCount;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      return this;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      this.fileContext = fileContext;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      return this;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      return this;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    /**<a name="line.710"></a>
-<span class="sourceLineNo">711</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.711"></a>
-<span class="sourceLineNo">712</span>     * done. If metadata, add BEFORE closing using<a name="line.712"></a>
-<span class="sourceLineNo">713</span>     * {@link Writer#appendMetadata}.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>     */<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    public Writer build() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            "or file path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>      if (dir == null) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        dir = filePath.getParent();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>      if (!fs.exists(dir)) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        fs.mkdirs(dir);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (filePath == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        filePath = getUniqueFile(fs, dir);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        if (!BloomFilterFactory.isGeneralBloomEnabled(conf)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>          bloomType = BloomType.NONE;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">647</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        FileSystem fs) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.conf = conf;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      this.cacheConf = cacheConf;<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      this.fs = fs;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * @param dir Path to column family directory. The directory is created if<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     *          does not exist. The file is given a unique name within this<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *          directory.<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     * @return this (for chained invocation)<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      Preconditions.checkNotNull(dir);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.dir = dir;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      return this;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span>    /**<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * @param filePath the StoreFile path to write<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     * @return this (for chained invocation)<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      Preconditions.checkNotNull(filePath);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      this.filePath = filePath;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      return this;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    /**<a name="line.678"></a>
+<span class="sourceLineNo">679</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.679"></a>
+<span class="sourceLineNo">680</span>     * @return this (for chained invocation)<a name="line.680"></a>
+<span class="sourceLineNo">681</span>     */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      this.favoredNodes = favoredNodes;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      return this;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      Preconditions.checkNotNull(comparator);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      this.comparator = comparator;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      return this;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      Preconditions.checkNotNull(bloomType);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      this.bloomType = bloomType;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return this;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    /**<a name="line.699"></a>
+<span class="sourceLineNo">700</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.700"></a>
+<span class="sourceLineNo">701</span>     * @return this (for chained invocation)<a name="line.701"></a>
+<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      this.maxKeyCount = maxKeyCount;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return this;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      this.fileContext = fileContext;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      return this;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return this;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.718"></a>
+<span class="sourceLineNo">719</span>     * done. If metadata, add BEFORE closing using<a name="line.719"></a>
+<span class="sourceLineNo">720</span>     * {@link Writer#appendMetadata}.<a name="line.720"></a>
+<span class="sourceLineNo">721</span>     */<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    public Writer build() throws IOException {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.724"></a>
+<span class="sourceLineNo">725</span>            "or file path");<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (dir == null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        dir = filePath.getParent();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (!fs.exists(dir)) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        fs.mkdirs(dir);<a name="line.733"></a>
 <span class="sourceLineNo">734</span>      }<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (comparator == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        comparator = CellComparator.COMPARATOR;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      return new Writer(fs, filePath,<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          conf, cacheConf, comparator, bloomType, maxKeyCount, favoredNodes, fileContext);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  /**<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @param fs<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param dir Directory to create file in.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return random filename inside passed &lt;code&gt;dir&lt;/code&gt;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  public static Path getUniqueFile(final FileSystem fs, final Path dir)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throws IOException {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    if (!fs.getFileStatus(dir).isDirectory()) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new IOException("Expecting " + dir.toString() +<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        " to be a directory");<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return new Path(dir, UUID.randomUUID().toString().replaceAll("-", ""));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  public Long getMinimumTimestamp() {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return (getReader().timeRangeTracker == null) ?<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        null :<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        getReader().timeRangeTracker.getMinimumTimestamp();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * Gets the approximate mid-point of this file that is optimal for use in splitting it.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @param comparator Comparator used to compare KVs.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @return The split point row, or null if splitting is not possible, or reader is null.<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  @SuppressWarnings("deprecation")<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  byte[] getFileSplitPoint(CellComparator comparator) throws IOException {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    if (this.reader == null) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.warn("Storefile " + this + " Reader is null; cannot get split point");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return null;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    // Get first, last, and mid keys.  Midkey is the key that starts block<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // in middle of hfile.  Has column and timestamp.  Need to return just<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // the row we want to split on as midkey.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Cell midkey = this.reader.midkey();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    if (midkey != null) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Cell firstKey = this.reader.getFirstKey();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      Cell lastKey = this.reader.getLastKey();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      // if the midkey is the same as the first or last keys, we cannot (ever) split this region.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      if (comparator.compareRows(midkey, firstKey) == 0<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          || comparator.compareRows(midkey, lastKey) == 0) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (LOG.isDebugEnabled()) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("cannot split because midkey is the same as first or last row");<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        return null;<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return CellUtil.cloneRow(midkey);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return null;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * A StoreFile writer.  Use this to read/write HBase Store Files. It is package<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * local because it is an implementation detail of the HBase regionserver.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  public static class Writer implements Compactor.CellSink {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    private final BloomFilterWriter generalBloomFilterWriter;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    private final BloomFilterWriter deleteFamilyBloomFilterWriter;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    private final BloomType bloomType;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    private byte[] lastBloomKey;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    private int lastBloomKeyOffset, lastBloomKeyLen;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    private Cell lastCell = null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    private long earliestPutTs = HConstants.LATEST_TIMESTAMP;<a name="line.806"></a>
-<span class="sourceLineNo">807</s

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html
index 0cc571b..f0d9e09 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.html
@@ -299,1507 +299,1514 @@
 <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>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @return True if this file was made by a major compaction.<a name="line.294"></a>
+<span class="sourceLineNo">294</span>   * @return True if this is HFile.<a name="line.294"></a>
 <span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public boolean isMajorCompaction() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (this.majorCompaction == null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throw new NullPointerException("This has not been set yet");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.majorCompaction.get();<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>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return True if this file should not be part of a minor compaction.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public boolean excludeFromMinorCompaction() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    return this.excludeFromMinorCompaction;<a name="line.307"></a>
+<span class="sourceLineNo">296</span>  public boolean isHFile() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.fileInfo.isHFile(this.fileInfo.getPath());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<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>   * @return True if this file was made by a major compaction.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public boolean isMajorCompaction() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    if (this.majorCompaction == null) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      throw new NullPointerException("This has not been set yet");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return this.majorCompaction.get();<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>  /**<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return This files maximum edit sequence id.<a name="line.311"></a>
+<span class="sourceLineNo">311</span>   * @return True if this file should not be part of a minor compaction.<a name="line.311"></a>
 <span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public long getMaxSequenceId() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return this.sequenceid;<a name="line.314"></a>
+<span class="sourceLineNo">313</span>  public boolean excludeFromMinorCompaction() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return this.excludeFromMinorCompaction;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Only used by the Striped Compaction Policy<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param key<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @return value associated with the metadata key<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return metadataMap.get(key);<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Return the largest memstoreTS found across all storefiles in<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * the given list. Store files that were created by a mapreduce<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * does not yet have any store files.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long max = 0;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (StoreFile sf : sfs) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!sf.isBulkLoadResult()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        max = Math.max(max, sf.getMaxMemstoreTS());<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>    return max;<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>   * Return the highest sequence ID found across all storefiles in<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * the given list.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param sfs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * does not yet have any store files.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long max = 0;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (StoreFile sf : sfs) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return max;<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>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Check if this storefile was created by bulk load.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * explicitly turned off.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @return true if this storefile was created by bulk load.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean isBulkLoadResult() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean bulkLoadedHFile = false;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    String fileName = this.getPath().getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (startPos != -1) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      bulkLoadedHFile = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @VisibleForTesting<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public boolean isCompactedAway() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (this.reader != null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return this.reader.isCompactedAway();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  @VisibleForTesting<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public int getRefCount() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return this.reader.refCount.get();<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>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Return the timestamp at which this bulk load file was generated.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public long getBulkLoadTimestamp() {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * calculated when store file is opened.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return this.fileInfo.getHDFSBlockDistribution();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return Reader for the store file.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IOException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @see #closeReader(boolean)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    if (this.reader != null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throw new IllegalAccessError("Already open");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // Open the StoreFile.Reader<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Read in our metadata.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (b != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // since store files are distinguished by sequence id, the one half would<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // subsume the other.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.sequenceid = Bytes.toLong(b);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      if (fileInfo.isTopReference()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        this.sequenceid += 1;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (isBulkLoadResult()){<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // generate the sequenceId from the fileName<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      String fileName = this.getPath().getName();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (startPos != -1) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            fileName.indexOf('_', startPos + 6)));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        // Handle reference files as done above.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (fileInfo.isTopReference()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // have the same row key but different seqIds.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      this.reader.setBulkLoaded(true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (b != null) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (b != null) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      boolean mc = Bytes.toBoolean(b);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (this.majorCompaction == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.majorCompaction.set(mc);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      this.majorCompaction = new AtomicBoolean(false);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (cfBloomType != BloomType.NONE) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (hfileBloomType != cfBloomType) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.info("HFile Bloom filter type for "<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            + "configuration");<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (timerangeBytes != null) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    } catch (IllegalArgumentException e) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          "proceeding without", e);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.reader.timeRangeTracker = null;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // initialize so we can reuse them after reader closed.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    firstKey = reader.getFirstKey();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    lastKey = reader.getLastKey();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    comparator = reader.getComparator();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.reader;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public Reader createReader() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return createReader(false);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * @return Reader for StoreFile. creates if necessary<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @throws IOException<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    if (this.reader == null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        this.reader = open(canUseDropBehind);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (IOException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        try {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          boolean evictOnClose =<a name="line.538"></a>
-<span class="sourceLineNo">539</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.539"></a>
-<span class="sourceLineNo">540</span>          this.closeReader(evictOnClose);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        } catch (IOException ee) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        throw e;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return this.reader;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<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>   * @return Current reader.  Must call createReader first else returns null.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @see #createReader()<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public Reader getReader() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this.reader;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @throws IOException<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   */<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (this.reader != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      this.reader.close(evictOnClose);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      this.reader = null;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * Marks the status of the file as compactedAway.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public void markCompactedAway() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    if (this.reader != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      this.reader.markCompactedAway();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * Delete this file<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @throws IOException<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  public void deleteReader() throws IOException {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    boolean evictOnClose =<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.585"></a>
-<span class="sourceLineNo">586</span>    closeReader(evictOnClose);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    this.fs.delete(getPath(), true);<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>  @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public String toString() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return this.fileInfo.toString();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public String toStringDetailed() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    StringBuilder sb = new StringBuilder();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    sb.append(this.getPath().toString());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    sb.append(", isReference=").append(isReference());<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (isBulkLoadResult()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return sb.toString();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @return Whether to skip resetting the sequence id.<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      justification="Will not overflow")<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  public static class WriterBuilder {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    private final Configuration conf;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final CacheConfig cacheConf;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private final FileSystem fs;<a name="line.630"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @return This files maximum edit sequence id.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public long getMaxSequenceId() {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this.sequenceid;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * Only used by the Striped Compaction Policy<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @param key<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @return value associated with the metadata key<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return metadataMap.get(key);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<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>   * Return the largest memstoreTS found across all storefiles in<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * the given list. Store files that were created by a mapreduce<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * does not yet have any store files.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    long max = 0;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (StoreFile sf : sfs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (!sf.isBulkLoadResult()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        max = Math.max(max, sf.getMaxMemstoreTS());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return max;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Return the highest sequence ID found across all storefiles in<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * the given list.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param sfs<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * does not yet have any store files.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    long max = 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    for (StoreFile sf : sfs) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return max;<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>  /**<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * Check if this storefile was created by bulk load.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * explicitly turned off.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @return true if this storefile was created by bulk load.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean isBulkLoadResult() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    boolean bulkLoadedHFile = false;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String fileName = this.getPath().getName();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (startPos != -1) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      bulkLoadedHFile = true;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @VisibleForTesting<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  public boolean isCompactedAway() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (this.reader != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return this.reader.isCompactedAway();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return true;<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>  @VisibleForTesting<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public int getRefCount() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return this.reader.refCount.get();<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 timestamp at which this bulk load file was generated.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public long getBulkLoadTimestamp() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * calculated when store file is opened.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return this.fileInfo.getHDFSBlockDistribution();<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>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return Reader for the store file.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @throws IOException<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @see #closeReader(boolean)<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (this.reader != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      throw new IllegalAccessError("Already open");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Open the StoreFile.Reader<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // Read in our metadata.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    if (b != null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // since store files are distinguished by sequence id, the one half would<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      // subsume the other.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      this.sequenceid = Bytes.toLong(b);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      if (fileInfo.isTopReference()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        this.sequenceid += 1;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (isBulkLoadResult()){<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // generate the sequenceId from the fileName<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      String fileName = this.getPath().getName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      if (startPos != -1) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            fileName.indexOf('_', startPos + 6)));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        // Handle reference files as done above.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        if (fileInfo.isTopReference()) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      // have the same row key but different seqIds.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      this.reader.setBulkLoaded(true);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (b != null) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    if (b != null) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      boolean mc = Bytes.toBoolean(b);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      if (this.majorCompaction == null) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      } else {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        this.majorCompaction.set(mc);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      this.majorCompaction = new AtomicBoolean(false);<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>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    if (cfBloomType != BloomType.NONE) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (hfileBloomType != cfBloomType) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        LOG.info("HFile Bloom filter type for "<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            + "configuration");<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (timerangeBytes != null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IllegalArgumentException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.520"></a>
+<span class="sourceLineNo">521</span>          "proceeding without", e);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      this.reader.timeRangeTracker = null;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // initialize so we can reuse them after reader closed.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    firstKey = reader.getFirstKey();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    lastKey = reader.getLastKey();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    comparator = reader.getComparator();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return this.reader;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>  public Reader createReader() throws IOException {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    return createReader(false);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>  /**<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @return Reader for StoreFile. creates if necessary<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @throws IOException<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (this.reader == null) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        this.reader = open(canUseDropBehind);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (IOException e) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        try {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          boolean evictOnClose =<a name="line.545"></a>
+<span class="sourceLineNo">546</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.546"></a>
+<span class="sourceLineNo">547</span>          this.closeReader(evictOnClose);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        } catch (IOException ee) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        throw e;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return this.reader;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * @return Current reader.  Must call createReader first else returns null.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @see #createReader()<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   */<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public Reader getReader() {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    return this.reader;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
+<span class="sourceLineNo">564</span><a name="line.564"></a>
+<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    if (this.reader != null) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.reader.close(evictOnClose);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.reader = null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<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>  /**<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * Marks the status of the file as compactedAway.<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void markCompactedAway() {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    if (this.reader != null) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.reader.markCompactedAway();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * Delete this file<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  public void deleteReader() throws IOException {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    boolean evictOnClose =<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.592"></a>
+<span class="sourceLineNo">593</span>    closeReader(evictOnClose);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    this.fs.delete(getPath(), true);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>  @Override<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  public String toString() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return this.fileInfo.toString();<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  public String toStringDetailed() {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    StringBuilder sb = new StringBuilder();<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    sb.append(this.getPath().toString());<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    sb.append(", isReference=").append(isReference());<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    if (isBulkLoadResult()) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return sb.toString();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return Whether to skip resetting the sequence id.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return false;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
 <span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    private BloomType bloomType = BloomType.NONE;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    private long maxKeyCount = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    private Path dir;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    private Path filePath;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    private InetSocketAddress[] favoredNodes;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    private HFileContext fileContext;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        FileSystem fs) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      this.conf = conf;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.cacheConf = cacheConf;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      this.fs = fs;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    }<a name="line.645"></a>
+<span class="sourceLineNo">632</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      justification="Will not overflow")<a name="line.633"></a>
+<span class="sourceLineNo">634</span>  public static class WriterBuilder {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    private final Configuration conf;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    private final CacheConfig cacheConf;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    private final FileSystem fs;<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    private BloomType bloomType = BloomType.NONE;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    private long maxKeyCount = 0;<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    private Path dir;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    private Path filePath;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    private InetSocketAddress[] favoredNodes;<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    private HFileContext fileContext;<a name="line.645"></a>
 <span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * @param dir Path to column family directory. The directory is created if<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *          does not exist. The file is given a unique name within this<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     *          directory.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     * @return this (for chained invocation)<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      Preconditions.checkNotNull(dir);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.dir = dir;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return this;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @param filePath the StoreFile path to write<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * @return this (for chained invocation)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     */<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      Preconditions.checkNotNull(filePath);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      this.filePath = filePath;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      return this;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    /**<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     * @return this (for chained invocation)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      this.favoredNodes = favoredNodes;<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      return this;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      Preconditions.checkNotNull(comparator);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      this.comparator = comparator;<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      return this;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      Preconditions.checkNotNull(bloomType);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      this.bloomType = bloomType;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      return this;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>    /**<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * @return this (for chained invocation)<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      this.maxKeyCount = maxKeyCount;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      return this;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      this.fileContext = fileContext;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      return this;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      return this;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    /**<a name="line.710"></a>
-<span class="sourceLineNo">711</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.711"></a>
-<span class="sourceLineNo">712</span>     * done. If metadata, add BEFORE closing using<a name="line.712"></a>
-<span class="sourceLineNo">713</span>     * {@link Writer#appendMetadata}.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>     */<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    public Writer build() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            "or file path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>      if (dir == null) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        dir = filePath.getParent();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>      if (!fs.exists(dir)) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        fs.mkdirs(dir);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (filePath == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        filePath = getUniqueFile(fs, dir);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        if (!BloomFilterFactory.isGeneralBloomEnabled(conf)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>          bloomType = BloomType.NONE;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">647</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        FileSystem fs) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.conf = conf;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      this.cacheConf = cacheConf;<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      this.fs = fs;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * @param dir Path to column family directory. The directory is created if<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     *          does not exist. The file is given a unique name within this<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *          directory.<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     * @return this (for chained invocation)<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      Preconditions.checkNotNull(dir);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.dir = dir;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      return this;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span>    /**<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * @param filePath the StoreFile path to write<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     * @return this (for chained invocation)<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      Preconditions.checkNotNull(filePath);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      this.filePath = filePath;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      return this;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    /**<a name="line.678"></a>
+<span class="sourceLineNo">679</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.679"></a>
+<span class="sourceLineNo">680</span>     * @return this (for chained invocation)<a name="line.680"></a>
+<span class="sourceLineNo">681</span>     */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      this.favoredNodes = favoredNodes;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      return this;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      Preconditions.checkNotNull(comparator);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      this.comparator = comparator;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      return this;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      Preconditions.checkNotNull(bloomType);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      this.bloomType = bloomType;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return this;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    /**<a name="line.699"></a>
+<span class="sourceLineNo">700</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.700"></a>
+<span class="sourceLineNo">701</span>     * @return this (for chained invocation)<a name="line.701"></a>
+<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      this.maxKeyCount = maxKeyCount;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return this;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      this.fileContext = fileContext;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      return this;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return this;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.718"></a>
+<span class="sourceLineNo">719</span>     * done. If metadata, add BEFORE closing using<a name="line.719"></a>
+<span class="sourceLineNo">720</span>     * {@link Writer#appendMetadata}.<a name="line.720"></a>
+<span class="sourceLineNo">721</span>     */<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    public Writer build() throws IOException {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.724"></a>
+<span class="sourceLineNo">725</span>            "or file path");<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (dir == null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        dir = filePath.getParent();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (!fs.exists(dir)) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        fs.mkdirs(dir);<a name="line.733"></a>
 <span class="sourceLineNo">734</span>      }<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (comparator == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        comparator = CellComparator.COMPARATOR;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      return new Writer(fs, filePath,<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          conf, cacheConf, comparator, bloomType, maxKeyCount, favoredNodes, fileContext);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  /**<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @param fs<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param dir Directory to create file in.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return random filename inside passed &lt;code&gt;dir&lt;/code&gt;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  public static Path getUniqueFile(final FileSystem fs, final Path dir)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throws IOException {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    if (!fs.getFileStatus(dir).isDirectory()) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new IOException("Expecting " + dir.toString() +<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        " to be a directory");<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return new Path(dir, UUID.randomUUID().toString().replaceAll("-", ""));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  public Long getMinimumTimestamp() {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return (getReader().timeRangeTracker == null) ?<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        null :<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        getReader().timeRangeTracker.getMinimumTimestamp();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * Gets the approximate mid-point of this file that is optimal for use in splitting it.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @param comparator Comparator used to compare KVs.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @return The split point row, or null if splitting is not possible, or reader is null.<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  @SuppressWarnings("deprecation")<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  byte[] getFileSplitPoint(CellComparator comparator) throws IOException {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    if (this.reader == null) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.warn("Storefile " + this + " Reader is null; cannot get split point");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return null;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    // Get first, last, and mid keys.  Midkey is the key that starts block<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // in middle of hfile.  Has column and timestamp.  Need to return just<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // the row we want to split on as midkey.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Cell midkey = this.reader.midkey();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    if (midkey != null) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Cell firstKey = this.reader.getFirstKey();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      Cell lastKey = this.reader.getLastKey();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      // if the midkey is the same as the first or last keys, we cannot (ever) split this region.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      if (comparator.compareRows(midkey, firstKey) == 0<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          || comparator.compareRows(midkey, lastKey) == 0) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (LOG.isDebugEnabled()) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("cannot split because midkey is the same as first or last row");<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        return null;<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return CellUtil.cloneRow(midkey);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return null;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * A StoreFile writer.  Use this to read/write HBase Store Files. It is package<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * local because it is an implementation detail of the HBase regionserver.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  public static class Writer implements Compactor.CellSink {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    private final BloomFilterWriter generalBloomFilterWriter;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    private final BloomFilterWriter deleteFamilyBloomFilterWriter;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    private final BloomType bloomType;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    private byte[] lastBloomKey;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    private int lastBloomKeyOffset, lastBloomKeyLen;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    private Cell lastCell = null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    private long earliestPutTs = HConstants.LATEST_TIMESTAMP;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    private Cell lastDeleteFamilyCell = null;<a name="li

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    System.err.println("   -e             Use table/re

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html
index 90e470a..a07726b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html
@@ -120,201 +120,209 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getAvgStoreFileAge()">getAvgStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheCount()">getBlockCacheCount</a></strong>()</code>
 <div class="block">Get the number of items in the block cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheEvictedCount()">getBlockCacheEvictedCount</a></strong>()</code>
 <div class="block">Get the number of items evicted from the block cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheFailedInsertions()">getBlockCacheFailedInsertions</a></strong>()</code>
 <div class="block">Number of cache insertions that failed.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheFreeSize()">getBlockCacheFreeSize</a></strong>()</code>
 <div class="block">Get the size (in bytes) of the block cache that is free.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheHitCachingPercent()">getBlockCacheHitCachingPercent</a></strong>()</code>
 <div class="block">Get the percent of requests with the block cache turned on that hit the block cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheHitCount()">getBlockCacheHitCount</a></strong>()</code>
 <div class="block">Get the count of hits to the block cache</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheHitPercent()">getBlockCacheHitPercent</a></strong>()</code>
 <div class="block">Get the percent of all requests that hit the block cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheMissCount()">getBlockCacheMissCount</a></strong>()</code>
 <div class="block">Get the count of misses to the block cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCachePrimaryEvictedCount()">getBlockCachePrimaryEvictedCount</a></strong>()</code>
 <div class="block">Get the number of items evicted from primary replica in the block cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCachePrimaryHitCount()">getBlockCachePrimaryHitCount</a></strong>()</code>
 <div class="block">Get the count of hits to primary replica in the block cache</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCachePrimaryMissCount()">getBlockCachePrimaryMissCount</a></strong>()</code>
 <div class="block">Get the count of misses to primary replica in the block cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheSize()">getBlockCacheSize</a></strong>()</code>
 <div class="block">Get the total size (in bytes) of the block cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockedRequestsCount()">getBlockedRequestsCount</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCellsCountCompactedFromMob()">getCellsCountCompactedFromMob</a></strong>()</code>
 <div class="block">Gets the number of cells moved from mob during compaction.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCellsCountCompactedToMob()">getCellsCountCompactedToMob</a></strong>()</code>
 <div class="block">Gets the number of cells moved to mob during compaction.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCellsSizeCompactedFromMob()">getCellsSizeCompactedFromMob</a></strong>()</code>
 <div class="block">Gets the total amount of cells moved from mob during compaction, in bytes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCellsSizeCompactedToMob()">getCellsSizeCompactedToMob</a></strong>()</code>
 <div class="block">Gets the total amount of cells moved to mob during compaction, in bytes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCheckAndMutateChecksFailed()">getCheckAndMutateChecksFailed</a></strong>()</code>
 <div class="block">Get the number of CAS operations that failed.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCheckAndMutateChecksPassed()">getCheckAndMutateChecksPassed</a></strong>()</code>
 <div class="block">Get the number of CAS operations that passed.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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/regionserver/MetricsRegionServerWrapper.html#getClusterId()">getClusterId</a></strong>()</code>
 <div class="block">Get the Cluster ID</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCompactedCellsCount()">getCompactedCellsCount</a></strong>()</code>
 <div class="block">Get the number of cells processed during minor compactions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCompactedCellsSize()">getCompactedCellsSize</a></strong>()</code>
 <div class="block">Get the total amount of data processed during minor compactions, in bytes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCompactionQueueSize()">getCompactionQueueSize</a></strong>()</code>
 <div class="block">Get the size of the compaction queue</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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/regionserver/MetricsRegionServerWrapper.html#getCoprocessors()">getCoprocessors</a></strong>()</code>
 <div class="block">Get the co-processors</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getDataInMemoryWithoutWAL()">getDataInMemoryWithoutWAL</a></strong>()</code>
 <div class="block">Ammount of data in the memstore but not in the WAL because mutations explicitly had their
  WAL turned off.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getFilteredReadRequestsCount()">getFilteredReadRequestsCount</a></strong>()</code>
 <div class="block">Get the number of filtered read requests to regions hosted on this region server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getFlushedCellsCount()">getFlushedCellsCount</a></strong>()</code>
 <div class="block">Get the number of cells flushed to disk.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getFlushedCellsSize()">getFlushedCellsSize</a></strong>()</code>
 <div class="block">Get the total amount of data flushed to disk, in bytes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getFlushQueueSize()">getFlushQueueSize</a></strong>()</code>
 <div class="block">Get the size of the flush queue.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getHedgedReadOps()">getHedgedReadOps</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getHedgedReadWins()">getHedgedReadWins</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/regionserver/MetricsRegionServerWrapper.html#getLargeCompactionQueueSize()">getLargeCompactionQueueSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMajorCompactedCellsCount()">getMajorCompactedCellsCount</a></strong>()</code>
 <div class="block">Get the number of cells processed during major compactions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMajorCompactedCellsSize()">getMajorCompactedCellsSize</a></strong>()</code>
 <div class="block">Get the total amount of data processed during major compactions, in bytes.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMaxStoreFileAge()">getMaxStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMemstoreSize()">getMemstoreSize</a></strong>()</code>
@@ -323,76 +331,84 @@
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMinStoreFileAge()">getMinStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMobFileCacheAccessCount()">getMobFileCacheAccessCount</a></strong>()</code>
 <div class="block">Gets the count of accesses to the mob file cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMobFileCacheCount()">getMobFileCacheCount</a></strong>()</code>
 <div class="block">Gets the count of cached mob files.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMobFileCacheEvictedCount()">getMobFileCacheEvictedCount</a></strong>()</code>
 <div class="block">Gets the number of items evicted from the mob file cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMobFileCacheHitPercent()">getMobFileCacheHitPercent</a></strong>()</code>
 <div class="block">Gets the hit percent to the mob file cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMobFileCacheMissCount()">getMobFileCacheMissCount</a></strong>()</code>
 <div class="block">Gets the count of misses to the mob file cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMobFlushCount()">getMobFlushCount</a></strong>()</code>
 <div class="block">Gets the number of the flushes in mob-enabled stores.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMobFlushedCellsCount()">getMobFlushedCellsCount</a></strong>()</code>
 <div class="block">Gets the number of mob cells flushed to disk.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMobFlushedCellsSize()">getMobFlushedCellsSize</a></strong>()</code>
 <div class="block">Gets the total amount of mob cells flushed to disk, in bytes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMobScanCellsCount()">getMobScanCellsCount</a></strong>()</code>
 <div class="block">Gets the number of scanned mob cells.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMobScanCellsSize()">getMobScanCellsSize</a></strong>()</code>
 <div class="block">Gets the total amount of scanned mob cells, in bytes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumMutationsWithoutWAL()">getNumMutationsWithoutWAL</a></strong>()</code>
 <div class="block">Number of mutations received with WAL explicitly turned off.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumOnlineRegions()">getNumOnlineRegions</a></strong>()</code>
 <div class="block">The number of online regions</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumReferenceFiles()">getNumReferenceFiles</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumStoreFiles()">getNumStoreFiles</a></strong>()</code>
@@ -690,13 +706,53 @@
 <div class="block">Get the total size of the store files this region server is serving from.</div>
 </li>
 </ul>
+<a name="getMaxStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMaxStoreFileAge</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.103">getMaxStoreFileAge</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Max age of store files hosted on this region server</dd></dl>
+</li>
+</ul>
+<a name="getMinStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMinStoreFileAge</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.108">getMinStoreFileAge</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Min age of store files hosted on this region server</dd></dl>
+</li>
+</ul>
+<a name="getAvgStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getAvgStoreFileAge</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.113">getAvgStoreFileAge</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Average age of store files hosted on this region server</dd></dl>
+</li>
+</ul>
+<a name="getNumReferenceFiles()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getNumReferenceFiles</h4>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.118">getNumReferenceFiles</a>()</pre>
+<dl><dt><span class="strong">Returns:</span></dt><dd>Number of reference files on this region server</dd></dl>
+</li>
+</ul>
 <a name="getRequestsPerSecond()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getRequestsPerSecond</h4>
-<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.103">getRequestsPerSecond</a>()</pre>
+<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.123">getRequestsPerSecond</a>()</pre>
 <div class="block">Get the number of requests per second.</div>
 </li>
 </ul>
@@ -706,7 +762,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalRequestCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.108">getTotalRequestCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.128">getTotalRequestCount</a>()</pre>
 <div class="block">Get the total number of requests per second.</div>
 </li>
 </ul>
@@ -716,7 +772,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadRequestsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.113">getReadRequestsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.133">getReadRequestsCount</a>()</pre>
 <div class="block">Get the number of read requests to regions hosted on this region server.</div>
 </li>
 </ul>
@@ -726,7 +782,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilteredReadRequestsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.118">getFilteredReadRequestsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.138">getFilteredReadRequestsCount</a>()</pre>
 <div class="block">Get the number of filtered read requests to regions hosted on this region server.</div>
 </li>
 </ul>
@@ -736,7 +792,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteRequestsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.123">getWriteRequestsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.143">getWriteRequestsCount</a>()</pre>
 <div class="block">Get the number of write requests to regions hosted on this region server.</div>
 </li>
 </ul>
@@ -746,7 +802,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCheckAndMutateChecksFailed</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.128">getCheckAndMutateChecksFailed</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.148">getCheckAndMutateChecksFailed</a>()</pre>
 <div class="block">Get the number of CAS operations that failed.</div>
 </li>
 </ul>
@@ -756,7 +812,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCheckAndMutateChecksPassed</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.133">getCheckAndMutateChecksPassed</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.153">getCheckAndMutateChecksPassed</a>()</pre>
 <div class="block">Get the number of CAS operations that passed.</div>
 </li>
 </ul>
@@ -766,7 +822,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFileIndexSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.138">getStoreFileIndexSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.158">getStoreFileIndexSize</a>()</pre>
 <div class="block">Get the Size (in bytes) of indexes in storefiles on disk.</div>
 </li>
 </ul>
@@ -776,7 +832,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalStaticIndexSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.143">getTotalStaticIndexSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.163">getTotalStaticIndexSize</a>()</pre>
 <div class="block">Get the size (in bytes) of of the static indexes including the roots.</div>
 </li>
 </ul>
@@ -786,7 +842,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalStaticBloomSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.148">getTotalStaticBloomSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.168">getTotalStaticBloomSize</a>()</pre>
 <div class="block">Get the size (in bytes) of the static bloom filters.</div>
 </li>
 </ul>
@@ -796,7 +852,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumMutationsWithoutWAL</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.153">getNumMutationsWithoutWAL</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.173">getNumMutationsWithoutWAL</a>()</pre>
 <div class="block">Number of mutations received with WAL explicitly turned off.</div>
 </li>
 </ul>
@@ -806,7 +862,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataInMemoryWithoutWAL</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.159">getDataInMemoryWithoutWAL</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.179">getDataInMemoryWithoutWAL</a>()</pre>
 <div class="block">Ammount of data in the memstore but not in the WAL because mutations explicitly had their
  WAL turned off.</div>
 </li>
@@ -817,7 +873,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getPercentFileLocal</h4>
-<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.164">getPercentFileLocal</a>()</pre>
+<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.184">getPercentFileLocal</a>()</pre>
 <div class="block">Get the percent of HFiles' that are local.</div>
 </li>
 </ul>
@@ -827,7 +883,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getPercentFileLocalSecondaryRegions</h4>
-<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.169">getPercentFileLocalSecondaryRegions</a>()</pre>
+<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.189">getPercentFileLocalSecondaryRegions</a>()</pre>
 <div class="block">Get the percent of HFiles' that are local for secondary region replicas.</div>
 </li>
 </ul>
@@ -837,7 +893,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitQueueSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.174">getSplitQueueSize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.194">getSplitQueueSize</a>()</pre>
 <div class="block">Get the size of the split queue</div>
 </li>
 </ul>
@@ -847,7 +903,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionQueueSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.179">getCompactionQueueSize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.199">getCompactionQueueSize</a>()</pre>
 <div class="block">Get the size of the compaction queue</div>
 </li>
 </ul>
@@ -857,7 +913,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSmallCompactionQueueSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.181">getSmallCompactionQueueSize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.201">getSmallCompactionQueueSize</a>()</pre>
 </li>
 </ul>
 <a name="getLargeCompactionQueueSize()">
@@ -866,7 +922,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getLargeCompactionQueueSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.183">getLargeCompactionQueueSize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.203">getLargeCompactionQueueSize</a>()</pre>
 </li>
 </ul>
 <a name="getFlushQueueSize()">
@@ -875,7 +931,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushQueueSize</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.188">getFlushQueueSize</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.208">getFlushQueueSize</a>()</pre>
 <div class="block">Get the size of the flush queue.</div>
 </li>
 </ul>
@@ -885,7 +941,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheFreeSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.193">getBlockCacheFreeSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.213">getBlockCacheFreeSize</a>()</pre>
 <div class="block">Get the size (in bytes) of the block cache that is free.</div>
 </li>
 </ul>
@@ -895,7 +951,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.198">getBlockCacheCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.218">getBlockCacheCount</a>()</pre>
 <div class="block">Get the number of items in the block cache.</div>
 </li>
 </ul>
@@ -905,7 +961,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.203">getBlockCacheSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.223">getBlockCacheSize</a>()</pre>
 <div class="block">Get the total size (in bytes) of the block cache.</div>
 </li>
 </ul>
@@ -915,7 +971,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheHitCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.208">getBlockCacheHitCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.228">getBlockCacheHitCount</a>()</pre>
 <div class="block">Get the count of hits to the block cache</div>
 </li>
 </ul>
@@ -925,7 +981,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCachePrimaryHitCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.213">getBlockCachePrimaryHitCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.233">getBlockCachePrimaryHitCount</a>()</pre>
 <div class="block">Get the count of hits to primary replica in the block cache</div>
 </li>
 </ul>
@@ -935,7 +991,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheMissCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.218">getBlockCacheMissCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.238">getBlockCacheMissCount</a>()</pre>
 <div class="block">Get the count of misses to the block cache.</div>
 </li>
 </ul>
@@ -945,7 +1001,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCachePrimaryMissCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.223">getBlockCachePrimaryMissCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.243">getBlockCachePrimaryMissCount</a>()</pre>
 <div class="block">Get the count of misses to primary replica in the block cache.</div>
 </li>
 </ul>
@@ -955,7 +1011,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheEvictedCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.228">getBlockCacheEvictedCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.248">getBlockCacheEvictedCount</a>()</pre>
 <div class="block">Get the number of items evicted from the block cache.</div>
 </li>
 </ul>
@@ -965,7 +1021,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCachePrimaryEvictedCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.233">getBlockCachePrimaryEvictedCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.253">getBlockCachePrimaryEvictedCount</a>()</pre>
 <div class="block">Get the number of items evicted from primary replica in the block cache.</div>
 </li>
 </ul>
@@ -975,7 +1031,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheHitPercent</h4>
-<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.239">getBlockCacheHitPercent</a>()</pre>
+<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.259">getBlockCacheHitPercent</a>()</pre>
 <div class="block">Get the percent of all requests that hit the block cache.</div>
 </li>
 </ul>
@@ -985,7 +1041,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheHitCachingPercent</h4>
-<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.244">getBlockCacheHitCachingPercent</a>()</pre>
+<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.264">getBlockCacheHitCachingPercent</a>()</pre>
 <div class="block">Get the percent of requests with the block cache turned on that hit the block cache.</div>
 </li>
 </ul>
@@ -995,7 +1051,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheFailedInsertions</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.249">getBlockCacheFailedInsertions</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.269">getBlockCacheFailedInsertions</a>()</pre>
 <div class="block">Number of cache insertions that failed.</div>
 </li>
 </ul>
@@ -1005,7 +1061,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>forceRecompute</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.254">forceRecompute</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.274">forceRecompute</a>()</pre>
 <div class="block">Force a re-computation of the metrics.</div>
 </li>
 </ul>
@@ -1015,7 +1071,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getUpdatesBlockedTime</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.259">getUpdatesBlockedTime</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.279">getUpdatesBlockedTime</a>()</pre>
 <div class="block">Get the amount of time that updates were blocked.</div>
 </li>
 </ul>
@@ -1025,7 +1081,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushedCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.264">getFlushedCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.284">getFlushedCellsCount</a>()</pre>
 <div class="block">Get the number of cells flushed to disk.</div>
 </li>
 </ul>
@@ -1035,7 +1091,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactedCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.269">getCompactedCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.289">getCompactedCellsCount</a>()</pre>
 <div class="block">Get the number of cells processed during minor compactions.</div>
 </li>
 </ul>
@@ -1045,7 +1101,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMajorCompactedCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.274">getMajorCompactedCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.294">getMajorCompactedCellsCount</a>()</pre>
 <div class="block">Get the number of cells processed during major compactions.</div>
 </li>
 </ul>
@@ -1055,7 +1111,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushedCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.279">getFlushedCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.299">getFlushedCellsSize</a>()</pre>
 <div class="block">Get the total amount of data flushed to disk, in bytes.</div>
 </li>
 </ul>
@@ -1065,7 +1121,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactedCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.284">getCompactedCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.304">getCompactedCellsSize</a>()</pre>
 <div class="block">Get the total amount of data processed during minor compactions, in bytes.</div>
 </li>
 </ul>
@@ -1075,7 +1131,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMajorCompactedCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.289">getMajorCompactedCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.309">getMajorCompactedCellsSize</a>()</pre>
 <div class="block">Get the total amount of data processed during major compactions, in bytes.</div>
 </li>
 </ul>
@@ -1085,7 +1141,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellsCountCompactedToMob</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.294">getCellsCountCompactedToMob</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.314">getCellsCountCompactedToMob</a>()</pre>
 <div class="block">Gets the number of cells moved to mob during compaction.</div>
 </li>
 </ul>
@@ -1095,7 +1151,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellsCountCompactedFromMob</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.299">getCellsCountCompactedFromMob</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.319">getCellsCountCompactedFromMob</a>()</pre>
 <div class="block">Gets the number of cells moved from mob during compaction.</div>
 </li>
 </ul>
@@ -1105,7 +1161,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellsSizeCompactedToMob</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.304">getCellsSizeCompactedToMob</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.324">getCellsSizeCompactedToMob</a>()</pre>
 <div class="block">Gets the total amount of cells moved to mob during compaction, in bytes.</div>
 </li>
 </ul>
@@ -1115,7 +1171,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellsSizeCompactedFromMob</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.309">getCellsSizeCompactedFromMob</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.329">getCellsSizeCompactedFromMob</a>()</pre>
 <div class="block">Gets the total amount of cells moved from mob during compaction, in bytes.</div>
 </li>
 </ul>
@@ -1125,7 +1181,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFlushCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.314">getMobFlushCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.334">getMobFlushCount</a>()</pre>
 <div class="block">Gets the number of the flushes in mob-enabled stores.</div>
 </li>
 </ul>
@@ -1135,7 +1191,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFlushedCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.319">getMobFlushedCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.339">getMobFlushedCellsCount</a>()</pre>
 <div class="block">Gets the number of mob cells flushed to disk.</div>
 </li>
 </ul>
@@ -1145,7 +1201,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFlushedCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.324">getMobFlushedCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.344">getMobFlushedCellsSize</a>()</pre>
 <div class="block">Gets the total amount of mob cells flushed to disk, in bytes.</div>
 </li>
 </ul>
@@ -1155,7 +1211,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobScanCellsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.329">getMobScanCellsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.349">getMobScanCellsCount</a>()</pre>
 <div class="block">Gets the number of scanned mob cells.</div>
 </li>
 </ul>
@@ -1165,7 +1221,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobScanCellsSize</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.334">getMobScanCellsSize</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.354">getMobScanCellsSize</a>()</pre>
 <div class="block">Gets the total amount of scanned mob cells, in bytes.</div>
 </li>
 </ul>
@@ -1175,7 +1231,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFileCacheAccessCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.339">getMobFileCacheAccessCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.359">getMobFileCacheAccessCount</a>()</pre>
 <div class="block">Gets the count of accesses to the mob file cache.</div>
 </li>
 </ul>
@@ -1185,7 +1241,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFileCacheMissCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.344">getMobFileCacheMissCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.364">getMobFileCacheMissCount</a>()</pre>
 <div class="block">Gets the count of misses to the mob file cache.</div>
 </li>
 </ul>
@@ -1195,7 +1251,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFileCacheEvictedCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.349">getMobFileCacheEvictedCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.369">getMobFileCacheEvictedCount</a>()</pre>
 <div class="block">Gets the number of items evicted from the mob file cache.</div>
 </li>
 </ul>
@@ -1205,7 +1261,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFileCacheCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.354">getMobFileCacheCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.374">getMobFileCacheCount</a>()</pre>
 <div class="block">Gets the count of cached mob files.</div>
 </li>
 </ul>
@@ -1215,7 +1271,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFileCacheHitPercent</h4>
-<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.359">getMobFileCacheHitPercent</a>()</pre>
+<pre>double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.379">getMobFileCacheHitPercent</a>()</pre>
 <div class="block">Gets the hit percent to the mob file cache.</div>
 </li>
 </ul>
@@ -1225,7 +1281,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHedgedReadOps</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.364">getHedgedReadOps</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.384">getHedgedReadOps</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Count of hedged read operations</dd></dl>
 </li>
 </ul>
@@ -1235,7 +1291,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHedgedReadWins</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.369">getHedgedReadWins</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.389">getHedgedReadWins</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Count of times a hedged read beat out the primary read.</dd></dl>
 </li>
 </ul>
@@ -1245,7 +1301,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockedRequestsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.374">getBlockedRequestsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.394">getBlockedRequestsCount</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Count of requests blocked because the memstore size is larger than blockingMemStoreSize</dd></dl>
 </li>
 </ul>
@@ -1255,7 +1311,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcGetRequestsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.379">getRpcGetRequestsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.399">getRpcGetRequestsCount</a>()</pre>
 <div class="block">Get the number of rpc get requests to this region server.</div>
 </li>
 </ul>
@@ -1265,7 +1321,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcScanRequestsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.384">getRpcScanRequestsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.404">getRpcScanRequestsCount</a>()</pre>
 <div class="block">Get the number of rpc scan requests to this region server.</div>
 </li>
 </ul>
@@ -1275,7 +1331,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRpcMultiRequestsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.389">getRpcMultiRequestsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.409">getRpcMultiRequestsCount</a>()</pre>
 <div class="block">Get the number of rpc multi requests to this region server.</div>
 </li>
 </ul>
@@ -1285,7 +1341,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRpcMutateRequestsCount</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.394">getRpcMutateRequestsCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#line.414">getRpcMutateRequestsCount</a>()</pre>
 <div class="block">Get the number of rpc mutate requests to this region server.</div>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html
index 4a53abe..3427d4a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.599">MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.623">MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable</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="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
 <div class="block">This is the runnable that will be executed on the executor every PERIOD number of seconds
@@ -199,7 +199,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>lastRan</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html#line.601">lastRan</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html#line.625">lastRan</a></pre>
 </li>
 </ul>
 <a name="lastRequestCount">
@@ -208,7 +208,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>lastRequestCount</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html#line.602">lastRequestCount</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html#line.626">lastRequestCount</a></pre>
 </li>
 </ul>
 </li>
@@ -225,7 +225,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html#line.599">MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html#line.623">MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable</a>()</pre>
 </li>
 </ul>
 </li>
@@ -242,7 +242,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html#line.605">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.RegionServerMetricsWrapperRunnable.html#line.629">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>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html
index ed06d4c..835ec87 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html
@@ -74,718 +74,769 @@
 <span class="sourceLineNo">066</span>  private volatile long numStoreFiles = 0;<a name="line.66"></a>
 <span class="sourceLineNo">067</span>  private volatile long memstoreSize = 0;<a name="line.67"></a>
 <span class="sourceLineNo">068</span>  private volatile long storeFileSize = 0;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private volatile double requestsPerSecond = 0.0;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private volatile long readRequestsCount = 0;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private volatile long filteredReadRequestsCount = 0;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private volatile long writeRequestsCount = 0;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  private volatile long checkAndMutateChecksFailed = 0;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private volatile long checkAndMutateChecksPassed = 0;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private volatile long storefileIndexSize = 0;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private volatile long totalStaticIndexSize = 0;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private volatile long totalStaticBloomSize = 0;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private volatile long numMutationsWithoutWAL = 0;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private volatile long dataInMemoryWithoutWAL = 0;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private volatile double percentFileLocal = 0;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private volatile double percentFileLocalSecondaryRegions = 0;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private volatile long flushedCellsCount = 0;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private volatile long compactedCellsCount = 0;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>  private volatile long majorCompactedCellsCount = 0;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private volatile long flushedCellsSize = 0;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  private volatile long compactedCellsSize = 0;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private volatile long majorCompactedCellsSize = 0;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private volatile long cellsCountCompactedToMob = 0;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private volatile long cellsCountCompactedFromMob = 0;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private volatile long cellsSizeCompactedToMob = 0;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  private volatile long cellsSizeCompactedFromMob = 0;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  private volatile long mobFlushCount = 0;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  private volatile long mobFlushedCellsCount = 0;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  private volatile long mobFlushedCellsSize = 0;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  private volatile long mobScanCellsCount = 0;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  private volatile long mobScanCellsSize = 0;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  private volatile long mobFileCacheAccessCount = 0;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  private volatile long mobFileCacheMissCount = 0;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  private volatile double mobFileCacheHitRatio = 0;<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  private volatile long mobFileCacheEvictedCount = 0;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  private volatile long mobFileCacheCount = 0;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  private volatile long blockedRequestsCount = 0L;<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private CacheStats cacheStats;<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  private ScheduledExecutorService executor;<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  private Runnable runnable;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private long period;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * Can be null if not on hdfs.<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  private DFSHedgedReadMetrics dfsHedgedReadMetrics;<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  public MetricsRegionServerWrapperImpl(final HRegionServer regionServer) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    this.regionServer = regionServer;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    initBlockCache();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    initMobFileCache();<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    this.period =<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        regionServer.conf.getLong(HConstants.REGIONSERVER_METRICS_PERIOD,<a name="line.120"></a>
-<span class="sourceLineNo">121</span>          HConstants.DEFAULT_REGIONSERVER_METRICS_PERIOD);<a name="line.121"></a>
+<span class="sourceLineNo">069</span>  private volatile long maxStoreFileAge = 0;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private volatile long minStoreFileAge = 0;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private volatile long avgStoreFileAge = 0;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private volatile long numReferenceFiles = 0;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private volatile double requestsPerSecond = 0.0;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  private volatile long readRequestsCount = 0;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  private volatile long filteredReadRequestsCount = 0;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private volatile long writeRequestsCount = 0;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private volatile long checkAndMutateChecksFailed = 0;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private volatile long checkAndMutateChecksPassed = 0;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private volatile long storefileIndexSize = 0;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  private volatile long totalStaticIndexSize = 0;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  private volatile long totalStaticBloomSize = 0;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>  private volatile long numMutationsWithoutWAL = 0;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  private volatile long dataInMemoryWithoutWAL = 0;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private volatile double percentFileLocal = 0;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  private volatile double percentFileLocalSecondaryRegions = 0;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private volatile long flushedCellsCount = 0;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  private volatile long compactedCellsCount = 0;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private volatile long majorCompactedCellsCount = 0;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  private volatile long flushedCellsSize = 0;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private volatile long compactedCellsSize = 0;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private volatile long majorCompactedCellsSize = 0;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private volatile long cellsCountCompactedToMob = 0;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private volatile long cellsCountCompactedFromMob = 0;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  private volatile long cellsSizeCompactedToMob = 0;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  private volatile long cellsSizeCompactedFromMob = 0;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  private volatile long mobFlushCount = 0;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  private volatile long mobFlushedCellsCount = 0;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  private volatile long mobFlushedCellsSize = 0;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  private volatile long mobScanCellsCount = 0;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  private volatile long mobScanCellsSize = 0;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  private volatile long mobFileCacheAccessCount = 0;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  private volatile long mobFileCacheMissCount = 0;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  private volatile double mobFileCacheHitRatio = 0;<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  private volatile long mobFileCacheEvictedCount = 0;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  private volatile long mobFileCacheCount = 0;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  private volatile long blockedRequestsCount = 0L;<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  private CacheStats cacheStats;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  private ScheduledExecutorService executor;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private Runnable runnable;<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private long period;<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>   * Can be null if not on hdfs.<a name="line.114"></a>
+<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  private DFSHedgedReadMetrics dfsHedgedReadMetrics;<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  public MetricsRegionServerWrapperImpl(final HRegionServer regionServer) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    this.regionServer = regionServer;<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    initBlockCache();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    initMobFileCache();<a name="line.121"></a>
 <span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>    this.executor = CompatibilitySingletonFactory.getInstance(MetricsExecutor.class).getExecutor();<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    this.runnable = new RegionServerMetricsWrapperRunnable();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    this.executor.scheduleWithFixedDelay(this.runnable, this.period, this.period,<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      TimeUnit.MILLISECONDS);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    this.metricsWALSource = CompatibilitySingletonFactory.getInstance(MetricsWALSource.class);<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>    try {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      this.dfsHedgedReadMetrics = FSUtils.getDFSHedgedReadMetrics(regionServer.getConfiguration());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    } catch (IOException e) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      LOG.warn("Failed to get hedged metrics", e);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    if (LOG.isInfoEnabled()) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.info("Computing regionserver metrics every " + this.period + " milliseconds");<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>  /**<a name="line.139"></a>
-<span class="sourceLineNo">140</span>   * It's possible that due to threading the block cache could not be initialized<a name="line.140"></a>
-<span class="sourceLineNo">141</span>   * yet (testing multiple region servers in one jvm).  So we need to try and initialize<a name="line.141"></a>
-<span class="sourceLineNo">142</span>   * the blockCache and cacheStats reference multiple times until we succeed.<a name="line.142"></a>
-<span class="sourceLineNo">143</span>   */<a name="line.143"></a>
-<span class="sourceLineNo">144</span>  private synchronized  void initBlockCache() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    CacheConfig cacheConfig = this.regionServer.cacheConfig;<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    if (cacheConfig != null &amp;&amp; this.blockCache == null) {<a name="line.146"></a>
-<span class="sourceLineNo">147</span>      this.blockCache = cacheConfig.getBlockCache();<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>    if (this.blockCache != null &amp;&amp; this.cacheStats == null) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>      this.cacheStats = blockCache.getStats();<a name="line.151"></a>
+<span class="sourceLineNo">123</span>    this.period =<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        regionServer.conf.getLong(HConstants.REGIONSERVER_METRICS_PERIOD,<a name="line.124"></a>
+<span class="sourceLineNo">125</span>          HConstants.DEFAULT_REGIONSERVER_METRICS_PERIOD);<a name="line.125"></a>
+<span class="sourceLineNo">126</span><a name="line.126"></a>
+<span class="sourceLineNo">127</span>    this.executor = CompatibilitySingletonFactory.getInstance(MetricsExecutor.class).getExecutor();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    this.runnable = new RegionServerMetricsWrapperRunnable();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    this.executor.scheduleWithFixedDelay(this.runnable, this.period, this.period,<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      TimeUnit.MILLISECONDS);<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    this.metricsWALSource = CompatibilitySingletonFactory.getInstance(MetricsWALSource.class);<a name="line.131"></a>
+<span class="sourceLineNo">132</span><a name="line.132"></a>
+<span class="sourceLineNo">133</span>    try {<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      this.dfsHedgedReadMetrics = FSUtils.getDFSHedgedReadMetrics(regionServer.getConfiguration());<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    } catch (IOException e) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.warn("Failed to get hedged metrics", e);<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    if (LOG.isInfoEnabled()) {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.info("Computing regionserver metrics every " + this.period + " milliseconds");<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    }<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>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * It's possible that due to threading the block cache could not be initialized<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * yet (testing multiple region servers in one jvm).  So we need to try and initialize<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   * the blockCache and cacheStats reference multiple times until we succeed.<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   */<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  private synchronized  void initBlockCache() {<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    CacheConfig cacheConfig = this.regionServer.cacheConfig;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    if (cacheConfig != null &amp;&amp; this.blockCache == null) {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      this.blockCache = cacheConfig.getBlockCache();<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><a name="line.154"></a>
-<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   * Initializes the mob file cache.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  private synchronized void initMobFileCache() {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    MobCacheConfig mobCacheConfig = this.regionServer.mobCacheConfig;<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    if (mobCacheConfig != null &amp;&amp; this.mobFileCache == null) {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      this.mobFileCache = mobCacheConfig.getMobFileCache();<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>  @Override<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  public String getClusterId() {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    return regionServer.getClusterId();<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 long getStartCode() {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    return regionServer.getStartcode();<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 String getZookeeperQuorum() {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    ZooKeeperWatcher zk = regionServer.getZooKeeper();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    if (zk == null) {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      return "";<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return zk.getQuorum();<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>  @Override<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  public String getCoprocessors() {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    String[] coprocessors = regionServer.getRegionServerCoprocessors();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    if (coprocessors == null || coprocessors.length == 0) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return "";<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    return StringUtils.join(coprocessors, ", ");<a name="line.190"></a>
-<span class="sourceLineNo">191</span>  }<a name="line.191"></a>
-<span class="sourceLineNo">192</span><a name="line.192"></a>
-<span class="sourceLineNo">193</span>  @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public String getServerName() {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    ServerName serverName = regionServer.getServerName();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    if (serverName == null) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      return "";<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    }<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    return serverName.getServerName();<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>  @Override<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  public long getNumOnlineRegions() {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    Collection&lt;Region&gt; onlineRegionsLocalContext = regionServer.getOnlineRegionsLocalContext();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    if (onlineRegionsLocalContext == null) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      return 0;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    return onlineRegionsLocalContext.size();<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
-<span class="sourceLineNo">210</span><a name="line.210"></a>
-<span class="sourceLineNo">211</span>  @Override<a name="line.211"></a>
-<span class="sourceLineNo">212</span>  public long getTotalRequestCount() {<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    return regionServer.rpcServices.requestCount.get();<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>  @Override<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public int getSplitQueueSize() {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      return 0;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    }<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    return this.regionServer.compactSplitThread.getSplitQueueSize();<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>  @Override<a name="line.224"></a>
-<span class="sourceLineNo">225</span>  public int getCompactionQueueSize() {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>      return 0;<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    return this.regionServer.compactSplitThread.getCompactionQueueSize();<a name="line.230"></a>
-<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
-<span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>  @Override<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  public int getSmallCompactionQueueSize() {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      return 0;<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return this.regionServer.compactSplitThread.getSmallCompactionQueueSize();<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>  @Override<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  public int getLargeCompactionQueueSize() {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      return 0;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    return this.regionServer.compactSplitThread.getLargeCompactionQueueSize();<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>  @Override<a name="line.251"></a>
-<span class="sourceLineNo">252</span>  public int getFlushQueueSize() {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    //If there is no flusher there should be no queue.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    if (this.regionServer.cacheFlusher == null) {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      return 0;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    return this.regionServer.cacheFlusher.getFlushQueueSize();<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>  @Override<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  public long getBlockCacheCount() {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    if (this.blockCache == null) {<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      return 0;<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    return this.blockCache.getBlockCount();<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>  @Override<a name="line.268"></a>
-<span class="sourceLineNo">269</span>  public long getBlockCacheSize() {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    if (this.blockCache == null) {<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      return 0;<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    }<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    return this.blockCache.getCurrentSize();<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 long getBlockCacheFreeSize() {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    if (this.blockCache == null) {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      return 0;<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    }<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    return this.blockCache.getFreeSize();<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>  @Override<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  public long getBlockCacheHitCount() {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    if (this.cacheStats == null) {<a name="line.286"></a>
-<span class="sourceLineNo">287</span>      return 0;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    return this.cacheStats.getHitCount();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  }<a name="line.290"></a>
-<span class="sourceLineNo">291</span><a name="line.291"></a>
-<span class="sourceLineNo">292</span>  @Override<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  public long getBlockCachePrimaryHitCount() {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    if (this.cacheStats == null) {<a name="line.294"></a>
-<span class="sourceLineNo">295</span>      return 0;<a name="line.295"></a>
-<span class="sourceLineNo">296</span>    }<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    return this.cacheStats.getPrimaryHitCount();<a name="line.297"></a>
-<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>  @Override<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  public long getBlockCacheMissCount() {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    if (this.cacheStats == null) {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      return 0;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    }<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return this.cacheStats.getMissCount();<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 long getBlockCachePrimaryMissCount() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    if (this.cacheStats == null) {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      return 0;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    return this.cacheStats.getPrimaryMissCount();<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 long getBlockCacheEvictedCount() {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    if (this.cacheStats == null) {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      return 0;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    }<a name="line.320"></a>
-<span class="sourceLineNo">321</span>    return this.cacheStats.getEvictedCount();<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>  @Override<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public long getBlockCachePrimaryEvictedCount() {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    if (this.cacheStats == null) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      return 0;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    return this.cacheStats.getPrimaryEvictedCount();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  }<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  @Override<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  public double getBlockCacheHitPercent() {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (this.cacheStats == null) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      return 0;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    double ratio = this.cacheStats.getHitRatio();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    if (Double.isNaN(ratio)) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      ratio = 0;<a name="line.339"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>    if (this.blockCache != null &amp;&amp; this.cacheStats == null) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      this.cacheStats = blockCache.getStats();<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><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Initializes the mob file cache.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  private synchronized void initMobFileCache() {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    MobCacheConfig mobCacheConfig = this.regionServer.mobCacheConfig;<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    if (mobCacheConfig != null &amp;&amp; this.mobFileCache == null) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      this.mobFileCache = mobCacheConfig.getMobFileCache();<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><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  @Override<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  public String getClusterId() {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    return regionServer.getClusterId();<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 long getStartCode() {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    return regionServer.getStartcode();<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>  @Override<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  public String getZookeeperQuorum() {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    ZooKeeperWatcher zk = regionServer.getZooKeeper();<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    if (zk == null) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      return "";<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    return zk.getQuorum();<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>  @Override<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public String getCoprocessors() {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    String[] coprocessors = regionServer.getRegionServerCoprocessors();<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    if (coprocessors == null || coprocessors.length == 0) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      return "";<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    }<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    return StringUtils.join(coprocessors, ", ");<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>  @Override<a name="line.197"></a>
+<span class="sourceLineNo">198</span>  public String getServerName() {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    ServerName serverName = regionServer.getServerName();<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    if (serverName == null) {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      return "";<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    return serverName.getServerName();<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>  @Override<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public long getNumOnlineRegions() {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    Collection&lt;Region&gt; onlineRegionsLocalContext = regionServer.getOnlineRegionsLocalContext();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (onlineRegionsLocalContext == null) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      return 0;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    }<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    return onlineRegionsLocalContext.size();<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>  @Override<a name="line.215"></a>
+<span class="sourceLineNo">216</span>  public long getTotalRequestCount() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    return regionServer.rpcServices.requestCount.get();<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>  @Override<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  public int getSplitQueueSize() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      return 0;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    }<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return this.regionServer.compactSplitThread.getSplitQueueSize();<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  }<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 int getCompactionQueueSize() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>      return 0;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    }<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    return this.regionServer.compactSplitThread.getCompactionQueueSize();<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>  @Override<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  public int getSmallCompactionQueueSize() {<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>      return 0;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    }<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return this.regionServer.compactSplitThread.getSmallCompactionQueueSize();<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @Override<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  public int getLargeCompactionQueueSize() {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    //The thread could be zero.  if so assume there is no queue.<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    if (this.regionServer.compactSplitThread == null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      return 0;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    return this.regionServer.compactSplitThread.getLargeCompactionQueueSize();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>  }<a name="line.253"></a>
+<span class="sourceLineNo">254</span><a name="line.254"></a>
+<span class="sourceLineNo">255</span>  @Override<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  public int getFlushQueueSize() {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    //If there is no flusher there should be no queue.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    if (this.regionServer.cacheFlusher == null) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      return 0;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return this.regionServer.cacheFlusher.getFlushQueueSize();<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>  @Override<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  public long getBlockCacheCount() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    if (this.blockCache == null) {<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      return 0;<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    return this.blockCache.getBlockCount();<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  }<a name="line.270"></a>
+<span class="sourceLineNo">271</span><a name="line.271"></a>
+<span class="sourceLineNo">272</span>  @Override<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  public long getBlockCacheSize() {<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (this.blockCache == null) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      return 0;<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    return this.blockCache.getCurrentSize();<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 long getBlockCacheFreeSize() {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    if (this.blockCache == null) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      return 0;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    }<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    return this.blockCache.getFreeSize();<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>  @Override<a name="line.288"></a>
+<span class="sourceLineNo">289</span>  public long getBlockCacheHitCount() {<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    if (this.cacheStats == null) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      return 0;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    return this.cacheStats.getHitCount();<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>  public long getBlockCachePrimaryHitCount() {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    if (this.cacheStats == null) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      return 0;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    return this.cacheStats.getPrimaryHitCount();<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  }<a name="line.302"></a>
+<span class="sourceLineNo">303</span><a name="line.303"></a>
+<span class="sourceLineNo">304</span>  @Override<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public long getBlockCacheMissCount() {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    if (this.cacheStats == null) {<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      return 0;<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    return this.cacheStats.getMissCount();<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>  @Override<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  public long getBlockCachePrimaryMissCount() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    if (this.cacheStats == null) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      return 0;<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    return this.cacheStats.getPrimaryMissCount();<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  @Override<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public long getBlockCacheEvictedCount() {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    if (this.cacheStats == null) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      return 0;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return this.cacheStats.getEvictedCount();<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 long getBlockCachePrimaryEvictedCount() {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    if (this.cacheStats == null) {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>      return 0;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    return this.cacheStats.getPrimaryEvictedCount();<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 double getBlockCacheHitPercent() {<a name="line.337"></a>
+<span class="sourceLineNo">338</span>    if (this.cacheStats == null) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      return 0;<a name="line.339"></a>
 <span class="sourceLineNo">340</span>    }<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    return (ratio * 100);<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>  @Override<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  public double getBlockCacheHitCachingPercent() {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    if (this.cacheStats == null) {<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      return 0;<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>    double ratio = this.cacheStats.getHitCachingRatio();<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>    if (Double.isNaN(ratio)) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      ratio = 0;<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    return (ratio * 100);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  }<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>  @Override<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  public long getBlockCacheFailedInsertions() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return this.cacheStats.getFailedInserts();<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>  @Override public void forceRecompute() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    this.runnable.run();<a name="line.364"></a>
+<span class="sourceLineNo">341</span>    double ratio = this.cacheStats.getHitRatio();<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    if (Double.isNaN(ratio)) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      ratio = 0;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    }<a name="line.344"></a>
+<span class="sourceLineNo">345</span>    return (ratio * 100);<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>  @Override<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  public double getBlockCacheHitCachingPercent() {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    if (this.cacheStats == null) {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      return 0;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    }<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>    double ratio = this.cacheStats.getHitCachingRatio();<a name="line.354"></a>
+<span class="sourceLineNo">355</span><a name="line.355"></a>
+<span class="sourceLineNo">356</span>    if (Double.isNaN(ratio)) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      ratio = 0;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    return (ratio * 100);<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>  @Override<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  public long getBlockCacheFailedInsertions() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    return this.cacheStats.getFailedInserts();<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>  @Override<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  public long getNumStores() {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    return numStores;<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>  @Override<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  public long getNumWALFiles() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    return numWALFiles;<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>  @Override<a name="line.377"></a>
-<span class="sourceLineNo">378</span>  public long getWALFileSize() {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    return walFileSize;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>  }<a name="line.380"></a>
-<span class="sourceLineNo">381</span><a name="line.381"></a>
-<span class="sourceLineNo">382</span>  @Override<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  public long getNumWALSlowAppend() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    return metricsWALSource.getSlowAppendCount();<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  <a name="line.386"></a>
-<span class="sourceLineNo">387</span>  @Override<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  public long getNumStoreFiles() {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    return numStoreFiles;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>  @Override<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  public long getMemstoreSize() {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>    return memstoreSize;<a name="line.394"></a>
-<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
-<span class="sourceLineNo">396</span><a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Override<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public long getStoreFileSize() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    return storeFileSize;<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>  @Override public double getRequestsPerSecond() {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    return requestsPerSecond;<a name="line.403"></a>
+<span class="sourceLineNo">367</span>  @Override public void forceRecompute() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    this.runnable.run();<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>  @Override<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  public long getNumStores() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    return numStores;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  <a name="line.375"></a>
+<span class="sourceLineNo">376</span>  @Override<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  public long getNumWALFiles() {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    return numWALFiles;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>  }<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  @Override<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  public long getWALFileSize() {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    return walFileSize;<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  }<a name="line.384"></a>
+<span class="sourceLineNo">385</span><a name="line.385"></a>
+<span class="sourceLineNo">386</span>  @Override<a name="line.386"></a>
+<span class="sourceLineNo">387</span>  public long getNumWALSlowAppend() {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    return metricsWALSource.getSlowAppendCount();<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  <a name="line.390"></a>
+<span class="sourceLineNo">391</span>  @Override<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  public long getNumStoreFiles() {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    return numStoreFiles;<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>  @Override<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  public long getMaxStoreFileAge() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    return maxStoreFileAge;<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>  @Override<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  public long getMinStoreFileAge() {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    return minStoreFileAge;<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>  @Override<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  public long getReadRequestsCount() {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    return readRequestsCount;<a name="line.408"></a>
+<span class="sourceLineNo">407</span>  public long getAvgStoreFileAge() {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return avgStoreFileAge;<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>  @Override<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  public long getFilteredReadRequestsCount() {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    return filteredReadRequestsCount;<a name="line.413"></a>
+<span class="sourceLineNo">412</span>  public long getNumReferenceFiles() {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    return numReferenceFiles;<a name="line.413"></a>
 <span class="sourceLineNo">414</span>  }<a name="line.414"></a>
 <span class="sourceLineNo">415</span><a name="line.415"></a>
 <span class="sourceLineNo">416</span>  @Override<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  public long getWriteRequestsCount() {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    return writeRequestsCount;<a name="line.418"></a>
+<span class="sourceLineNo">417</span>  public long getMemstoreSize() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    return memstoreSize;<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>  @Override<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  public long getRpcGetRequestsCount() {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    return regionServer.rpcServices.rpcGetRequestCount.get();<a name="line.423"></a>
+<span class="sourceLineNo">422</span>  public long getStoreFileSize() {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    return storeFileSize;<a name="line.423"></a>
 <span class="sourceLineNo">424</span>  }<a name="line.424"></a>
 <span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  @Override<a name="line.426"></a>
-<span class="sourceLineNo">427</span>  public long getRpcScanRequestsCount() {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    return regionServer.rpcServices.rpcScanRequestCount.get();<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>  @Override<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  public long getRpcMultiRequestsCount() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    return regionServer.rpcServices.rpcMultiRequestCount.get();<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  }<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  @Override<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  public long getRpcMutateRequestsCount() {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    return regionServer.rpcServices.rpcMutateRequestCount.get();<a name="line.438"></a>
-<span class="sourceLineNo">439</span>  }<a name="line.439"></a>
-<span class="sourceLineNo">440</span><a name="line.440"></a>
-<span class="sourceLineNo">441</span>  @Override<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public long getCheckAndMutateChecksFailed() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    return checkAndMutateChecksFailed;<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>  @Override<a name="line.446"></a>
-<span class="sourceLineNo">447</span>  public long getCheckAndMutateChecksPassed() {<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    return checkAndMutateChecksPassed;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public long getStoreFileIndexSize() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return storefileIndexSize;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public long getTotalStaticIndexSize() {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    return totalStaticIndexSize;<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>  @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public long getTotalStaticBloomSize() {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return totalStaticBloomSize;<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>  @Override<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  public long getNumMutationsWithoutWAL() {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    return numMutationsWithoutWAL;<a name="line.468"></a>
-<span class="sourceLineNo">469</span>  }<a name="line.469"></a>
-<span class="sourceLineNo">470</span><a name="line.470"></a>
-<span class="sourceLineNo">471</span>  @Override<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  public long getDataInMemoryWithoutWAL() {<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    return dataInMemoryWithoutWAL;<a name="line.473"></a>
-<span class="sourceLineNo">474</span>  }<a name="line.474"></a>
-<span class="sourceLineNo">475</span><a name="line.475"></a>
-<span class="sourceLineNo">476</span>  @Override<a name="line.476"></a>
-<span class="sourceLineNo">477</span>  public double getPercentFileLocal() {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>    return percentFileLocal;<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>  @Override<a name="line.481"></a>
-<span class="sourceLineNo">482</span>  public double getPercentFileLocalSecondaryRegions() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    return percentFileLocalSecondaryRegions;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  @Override<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  public long getUpdatesBlockedTime() {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    if (this.regionServer.cacheFlusher == null) {<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      return 0;<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    }<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    return this.regionServer.cacheFlusher.getUpdatesBlockedMsHighWater().get();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>  }<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>  @Override<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  public long getFlushedCellsCount() {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    return flushedCellsCount;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>  }<a name="line.497"></a>
-<span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>  @Override<a name="line.499"></a>
-<span class="sourceLineNo">500</span>  public long getCompactedCellsCount() {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    return compactedCellsCount;<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>  @Override<a name="line.504"></a>
-<span class="sourceLineNo">505</span>  public long getMajorCompactedCellsCount() {<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    return majorCompactedCellsCount;<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>  @Override<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  public long getFlushedCellsSize() {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    return flushedCellsSize;<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>  @Override<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  public long getCompactedCellsSize() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    return compactedCellsSize;<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  @Override<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  public long getMajorCompactedCellsSize() {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return majorCompactedCellsSize;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  @Override<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  public long getCellsCountCompactedFromMob() {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    return cellsCountCompactedFromMob;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>  @Override<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  public long getCellsCountCompactedToMob() {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    return cellsCountCompactedToMob;<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>  @Override<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  public long getCellsSizeCompactedFromMob() {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    return cellsSizeCompactedFromMob;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  @Override<a name="line.539"></a>
-<span class="sourceLineNo">540</span>  public long getCellsSizeCompactedToMob() {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    return cellsSizeCompactedToMob;<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>  @Override<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public long getMobFlushCount() {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    return mobFlushCount;<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public long getMobFlushedCellsCount() {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    return mobFlushedCellsCount;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  }<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  @Override<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  public long getMobFlushedCellsSize() {<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    return mobFlushedCellsSize;<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>  @Override<a name="line.559"></a>
-<span class="sourceLineNo">560</span>  public long getMobScanCellsCount() {<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    return mobScanCellsCount;<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  }<a name="line.562"></a>
-<span class="sourceLineNo">563</span><a name="line.563"></a>
-<span class="sourceLineNo">564</span>  @Override<a name="line.564"></a>
-<span class="sourceLineNo">565</span>  public long getMobScanCellsSize() {<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    return mobScanCellsSize;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>  }<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>  @Override<a name="line.569"></a>
-<span class="sourceLineNo">570</span>  public long getMobFileCacheAccessCount() {<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    return mobFileCacheAccessCount;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
-<span class="sourceLineNo">573</span><a name="line.573"></a>
-<span class="sourceLineNo">574</span>  @Override<a name="line.574"></a>
-<span class="sourceLineNo">575</span>  public long getMobFileCacheMissCount() {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    return mobFileCacheMissCount;<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  @Override<a name="line.579"></a>
-<span class="sourceLineNo">580</span>  public long getMobFileCacheCount() {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>    return mobFileCacheCount;<a name="line.581"></a>
-<span class="sourceLineNo">582</span>  }<a name="line.582"></a>
-<span class="sourceLineNo">583</span><a name="line.583"></a>
-<span class="sourceLineNo">584</span>  @Override<a name="line.584"></a>
-<span class="sourceLineNo">585</span>  public long getMobFileCacheEvictedCount() {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>    return mobFileCacheEvictedCount;<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  }<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>  @Override<a name="line.589"></a>
-<span class="sourceLineNo">590</span>  public double getMobFileCacheHitPercent() {<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    return mobFileCacheHitRatio * 100;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  }<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>  /**<a name="line.594"></a>
-<span class="sourceLineNo">595</span>   * This is the runnable that will be executed on the executor every PERIOD number of seconds<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * It will take metrics/numbers from all of the regions and use them to compute point in<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   * time metrics.<a name="line.597"></a>
-<span class="sourceLineNo">598</span>   */<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  public class RegionServerMetricsWrapperRunnable implements Runnable {<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>    private long lastRan = 0;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    private long lastRequestCount = 0;<a name="line.602"></a>
-<span class="sourceLineNo">603</span><a name="line.603"></a>
-<span class="sourceLineNo">604</span>    @Override<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    synchronized public void run() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      try {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        initBlockCache();<a name="line.607"></a>
-<span class="sourceLineNo">608</span>        initMobFileCache();<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        cacheStats = blockCache.getStats();<a name="line.609"></a>
-<span class="sourceLineNo">610</span><a name="line.610"></a>
-<span class="sourceLineNo">611</span>        HDFSBlocksDistribution hdfsBlocksDistribution =<a name="line.611"></a>
-<span class="sourceLineNo">612</span>            new HDFSBlocksDistribution();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>        HDFSBlocksDistribution hdfsBlocksDistributionSecondaryRegions =<a name="line.613"></a>
-<span class="sourceLineNo">614</span>            new HDFSBlocksDistribution();<a name="line.614"></a>
-<span class="sourceLineNo">615</span><a name="line.615"></a>
-<span class="sourceLineNo">616</span>        long tempNumStores = 0, tempNumStoreFiles = 0, tempMemstoreSize = 0, tempStoreFileSize = 0;<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        long tempReadRequestsCount = 0, tempFilteredReadRequestsCount = 0,<a name="line.617"></a>
-<span class="sourceLineNo">618</span>          tempWriteRequestsCount = 0;<a name="line.618"></a>
-<span class="sourceLineNo">619</span>        long tempCheckAndMutateChecksFailed = 0;<a name="line.619"></a>
-<span class="sourceLineNo">620</span>        long tempCheckAndMutateChecksPassed = 0;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>        long tempStorefileIndexSize = 0;<a name="line.621"></a>
-<span class="sourceLineNo">622</span>        long tempTotalStaticIndexSize = 0;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        long tempTotalStaticBloomSize = 0;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        long tempNumMutationsWithoutWAL = 0;<a name="line.624"></a>
-<span class="sourceLineNo">625</span>        long tempDataInMemoryWithoutWAL = 0;<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        double tempPercentFileLocal = 0;<a name="line.626"></a>
-<span class="sourceLineNo">627</span>        double tempPercentFileLocalSecondaryRegions = 0;<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        long tempFlushedCellsCount = 0;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        long tempCompactedCellsCount = 0;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        long tempMajorCompactedCellsCount = 0;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        long tempFlushedCellsSize = 0;<a name="line.631"></a>
-<span class="sourceLineNo">632</span>        long tempCompactedCellsSize = 0;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>        long tempMajorCompactedCellsSize = 0;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>        long tempCellsCountCompactedToMob = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>        long tempCellsCountCompactedFromMob = 0;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        long tempCellsSizeCompactedToMob = 0;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        long tempCellsSizeCompactedFromMob = 0;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        long tempMobFlushCount = 0;<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        long tempMobFlushedCellsCount = 0;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        long tempMobFlushedCellsSize = 0;<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        long tempMobScanCellsCount = 0;<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        long tempMobScanCellsSize = 0;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        long tempBlockedRequestsCount = 0;<a name="line.643"></a>
-<span class="sourceLineNo">644</span><a name="line.644"></a>
-<span class="sourceLineNo">645</span>        for (Region r : regionServer.getOnlineRegionsLocalContext()) {<a name="line.645"></a>
-<span class="sourceLineNo">646</span>          tempNumMutationsWithoutWAL += r.getNumMutationsWithoutWAL();<a name="line.646"></a>
-<span class="sourceLineNo">647</span>          tempDataInMemoryWithoutWAL += r.getDataInMemoryWithoutWAL();<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          tempReadRequestsCount += r.getReadRequestsCount();<a name="line.648"></a>
-<span class="sourceLineNo">649</span>          tempFilteredReadRequestsCount += r.getFilteredReadRequestsCount();<a name="line.649"></a>
-<span class="sourceLineNo">650</span>          tempWriteRequestsCount += r.getWriteRequestsCount();<a name="line.650"></a>
-<span class="sourceLineNo">651</span>          tempCheckAndMutateChecksFailed += r.getCheckAndMutateChecksFailed();<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          tempCheckAndMutateChecksPassed += r.getCheckAndMutateChecksPassed();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>          tempBlockedRequestsCount += r.getBlockedRequestsCount();<a name="line.653"></a>
-<span class="sourceLineNo">654</span>          List&lt;Store&gt; storeList = r.getStores();<a name="line.654"></a>
-<span class="sourceLineNo">655</span>          tempNumStores += storeList.size();<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          for (Store store : storeList) {<a name="line.656"></a>
-<span class="sourceLineNo">657</span>            tempNumStoreFiles += store.getStorefilesCount();<a name="line.657"></a>
-<span class="sourceLineNo">658</span>            tempMemstoreSize += store.getMemStoreSize();<a name="line.658"></a>
-<span class="sourceLineNo">659</span>            tempStoreFileSize += store.getStorefilesSize();<a name="line.659"></a>
-<span class="sourceLineNo">660</span>            tempStorefileIndexSize += store.getStorefilesIndexSize();<a name="line.660"></a>
-<span class="sourceLineNo">661</span>            tempTotalStaticBloomSize += store.getTotalStaticBloomSize();<a name="line.661"></a>
-<span class="sourceLineNo">662</span>            tempTotalStaticIndexSize += store.getTotalStaticIndexSize();<a name="line.662"></a>
-<span class="sourceLineNo">663</span>            tempFlushedCellsCount += store.getFlushedCellsCount();<a name="line.663"></a>
-<span class="sourceLineNo">664</span>            tempCompactedCellsCount += store.getCompactedCellsCount();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>            tempMajorCompactedCellsCount += store.getMajorCompactedCellsCount();<a name="line.665"></a>
-<span class="sourceLineNo">666</span>            tempFlushedCellsSize += store.getFlushedCellsSize();<a name="line.666"></a>
-<span class="sourceLineNo">667</span>            tempCompactedCellsSize += store.getCompactedCellsSize();<a name="line.667"></a>
-<span class="sourceLineNo">668</span>            tempMajorCompactedCellsSize += store.getMajorCompactedCellsSize();<a name="line.668"></a>
-<span class="sourceLineNo">669</span>            if (store instanceof HMobStore) {<a name="line.669"></a>
-<span class="sourceLineNo">670</span>              HMobStore mobStore = (HMobStore) store;<a name="line.670"></a>
-<span class="sourceLineNo">671</span>              tempCellsCountCompactedToMob += mobStore.getCellsCountCompactedToMob();<a name="line.671"></a>
-<span class="sourceLineNo">672</span>              tempCellsCountCompactedFromMob += mobStore.getCellsCountCompactedFromMob();<a name="line.672"></a>
-<span class="sourceLineNo">673</span>              tempCellsSizeCompactedToMob += mobStore.getCellsSizeCompactedToMob();<a name="line.673"></a>
-<span class="sourceLineNo">674</span>              tempCellsSizeCompactedFromMob += mobStore.getCellsSizeCompactedFromMob();<a name="line.674"></a>
-<span class="sourceLineNo">675</span>              tempMobFlushCount += mobStore.getMobFlushCount();<a name="line.675"></a>
-<span class="sourceLineNo">676</span>              tempMobFlushedCellsCount += mobStore.getMobFlushedCellsCount();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>              tempMobFlushedCellsSize += mobStore.getMobFlushedCellsSize();<a name="line.677"></a>
-<span class="sourceLineNo">678</span>              tempMobScanCellsCount += mobStore.getMobScanCellsCount();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>              tempMobScanCellsSize += mobStore.getMobScanCellsSize();<a name="line.679"></a>
-<span class="sourceLineNo">680</span>            }<a name="line.680"></a>
-<span class="sourceLineNo">681</span>          }<a name="line.681"></a>
-<span class="sourceLineNo">682</span><a name="line.682"></a>
-<span class="sourceLineNo">683</span>          HDFSBlocksDistribution distro = r.getHDFSBlocksDistribution();<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          hdfsBlocksDistribution.add(distro);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>          if (r.getRegionInfo().getReplicaId() != HRegionInfo.DEFAULT_REPLICA_ID) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>            hdfsBlocksDistributionSecondaryRegions.add(distro);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>        }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        float localityIndex = hdfsBlocksDistribution.getBlockLocalityIndex(<a name="line.689"></a>
-<span class="sourceLineNo">690</span>            regionServer.getServerName().getHostname());<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        tempPercentFileLocal = Double.isNaN(tempBlockedRequestsCount) ? 0 : (localityIndex * 100);<a name="line.691"></a>
-<span class="sourceLineNo">692</span><a name="line.692"></a>
-<span class="sourceLineNo">693</span>        float localityIndexSecondaryRegions = hdfsBlocksDistributionSecondaryRegions<a name="line.693"></a>
-<span class="sourceLineNo">694</span>            .getBlockLocalityIndex(regionServer.getServerName().getHostname());<a name="line.694"></a>
-<span class="sourceLineNo">695</span>        tempPercentFileLocalSecondaryRegions = Double.<a name="line.695"></a>
-<span class="sourceLineNo">696</span>            isNaN(localityIndexSecondaryRegions) ? 0 : (localityIndexSecondaryRegions * 100);<a name="line.696"></a>
-<span class="sourceLineNo">697</span><a name="line.697"></a>
-<span class="sourceLineNo">698</span>        // Compute the number of requests per second<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        long currentTime = EnvironmentEdgeManager.currentTime();<a name="line.699"></a>
+<span class="sourceLineNo">426</span>  @Override public double getRequestsPerSecond() {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    return requestsPerSecond;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>  @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  public long getReadRequestsCount() {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    return readRequestsCount;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  }<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  @Override<a name="line.435"></a>
+<span class="sourceLineNo">436</span>  public long getFilteredReadRequestsCount() {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    return filteredReadRequestsCount;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  }<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>  @Override<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  public long getWriteRequestsCount() {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    return writeRequestsCount;<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</spa

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionTask.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    System.err.println("   -e             Use table/regionserver as r

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.Sink.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    System.err.println("   -e             Use table/regionserver as regular expression");<a name="l

<TRUNCATED>

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

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


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

Branch: refs/heads/asf-site
Commit: f6cc92246593f506b03a62e9a8ccb5dda2150855
Parents: f564c61
Author: jenkins <bu...@apache.org>
Authored: Mon Feb 22 15:50:32 2016 +0000
Committer: Misty Stanley-Jones <ms...@cloudera.com>
Committed: Mon Feb 22 08:21:20 2016 -0800

----------------------------------------------------------------------
 acid-semantics.html                             |     6 +-
 apache_hbase_reference_guide.pdf                | 22446 +++++++++--------
 apache_hbase_reference_guide.pdfmarks           |     4 +-
 apidocs/index-all.html                          |     6 +
 .../hadoop/hbase/zookeeper/package-summary.html |     4 +-
 .../hadoop/hbase/zookeeper/package-tree.html    |     4 +-
 .../exemplars/client/package-frame.html         |    12 +
 .../exemplars/client/package-summary.html       |   128 +
 .../exemplars/client/package-tree.html          |   118 +
 .../exemplars/client/package-use.html           |   115 +
 apidocs/overview-frame.html                     |     1 +
 apidocs/overview-summary.html                   |     8 +
 apidocs/overview-tree.html                      |     3 +-
 apidocs/package-list                            |     1 +
 book.html                                       |    85 +-
 bulk-loads.html                                 |     6 +-
 checkstyle-aggregate.html                       | 10918 ++++----
 checkstyle.rss                                  |    48 +-
 coc.html                                        |     6 +-
 cygwin.html                                     |     6 +-
 dependencies.html                               |     6 +-
 dependency-convergence.html                     |    22 +-
 dependency-info.html                            |     6 +-
 dependency-management.html                      |     6 +-
 devapidocs/allclasses-frame.html                |     1 +
 devapidocs/allclasses-noframe.html              |     1 +
 devapidocs/constant-values.html                 |    90 +-
 devapidocs/index-all.html                       |   174 +-
 .../hadoop/hbase/class-use/TableName.html       |    31 +-
 .../hbase/classification/package-tree.html      |     8 +-
 .../hadoop/hbase/client/class-use/Admin.html    |    43 +
 .../hbase/client/class-use/Connection.html      |    15 +-
 .../hadoop/hbase/client/class-use/Table.html    |    41 +
 .../hadoop/hbase/client/package-tree.html       |     6 +-
 .../apache/hadoop/hbase/client/package-use.html |    30 +
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hadoop/hbase/filter/package-tree.html       |    10 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |     8 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     4 +-
 .../hadoop/hbase/master/package-tree.html       |     4 +-
 .../hbase/master/procedure/package-tree.html    |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../org/apache/hadoop/hbase/package-use.html    |    25 +
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../hadoop/hbase/quotas/package-tree.html       |     6 +-
 .../hadoop/hbase/regionserver/HMobStore.html    |     2 +-
 .../regionserver/HStore.StoreFlusherImpl.html   |    28 +-
 .../hadoop/hbase/regionserver/HStore.html       |   339 +-
 .../regionserver/MetricsRegionServerSource.html |   404 +-
 .../MetricsRegionServerSourceImpl.html          |     2 +-
 .../MetricsRegionServerWrapper.html             |   264 +-
 ...Impl.RegionServerMetricsWrapperRunnable.html |    10 +-
 .../MetricsRegionServerWrapperImpl.html         |   498 +-
 .../regionserver/MetricsRegionSourceImpl.html   |     4 +-
 .../regionserver/MetricsRegionWrapper.html      |    74 +-
 ...apperImpl.HRegionMetricsWrapperRunnable.html |     6 +-
 .../regionserver/MetricsRegionWrapperImpl.html  |   162 +-
 .../apache/hadoop/hbase/regionserver/Store.html |   226 +-
 .../StoreFile.Comparators.GetBulkTime.html      |     6 +-
 .../StoreFile.Comparators.GetFileSize.html      |     6 +-
 .../StoreFile.Comparators.GetPathName.html      |     6 +-
 .../StoreFile.Comparators.GetSeqId.html         |     6 +-
 .../regionserver/StoreFile.Comparators.html     |     6 +-
 .../hbase/regionserver/StoreFile.Reader.html    |   136 +-
 .../hbase/regionserver/StoreFile.Writer.html    |    66 +-
 .../regionserver/StoreFile.WriterBuilder.html   |    42 +-
 .../hadoop/hbase/regionserver/StoreFile.html    |    78 +-
 .../hbase/regionserver/StoreFileInfo.html       |   151 +-
 .../hadoop/hbase/regionserver/package-tree.html |    24 +-
 .../hbase/security/access/package-tree.html     |     4 +-
 .../hadoop/hbase/security/package-tree.html     |     4 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   180 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |    72 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    36 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |    60 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    24 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    12 +-
 .../hadoop/hbase/tool/Canary.ExtendedSink.html  |     8 +-
 .../hadoop/hbase/tool/Canary.Monitor.html       |    74 +-
 .../hadoop/hbase/tool/Canary.RegionMonitor.html |    46 +-
 .../hbase/tool/Canary.RegionServerMonitor.html  |    34 +-
 .../tool/Canary.RegionServerStdOutSink.html     |    12 +-
 .../hbase/tool/Canary.RegionServerTask.html     |    16 +-
 .../hbase/tool/Canary.RegionTask.TaskType.html  |    10 +-
 .../hadoop/hbase/tool/Canary.RegionTask.html    |    18 +-
 .../apache/hadoop/hbase/tool/Canary.Sink.html   |    61 +-
 .../hadoop/hbase/tool/Canary.StdOutSink.html    |   134 +-
 .../org/apache/hadoop/hbase/tool/Canary.html    |   111 +-
 .../tool/class-use/Canary.ExtendedSink.html     |     5 +-
 .../hbase/tool/class-use/Canary.Sink.html       |    10 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     8 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     4 +-
 .../hadoop/metrics2/util/package-summary.html   |     4 +-
 .../hadoop/metrics2/util/package-tree.html      |     4 +-
 .../archetypes/exemplars/client/HelloHBase.html |   495 +
 .../exemplars/client/class-use/HelloHBase.html  |   115 +
 .../exemplars/client/package-frame.html         |    18 +
 .../exemplars/client/package-summary.html       |   149 +
 .../exemplars/client/package-tree.html          |   128 +
 .../exemplars/client/package-use.html           |   115 +
 devapidocs/overview-frame.html                  |     1 +
 devapidocs/overview-summary.html                |     8 +
 devapidocs/overview-tree.html                   |     4 +-
 devapidocs/package-list                         |     1 +
 .../regionserver/HStore.StoreFlusherImpl.html   |  1029 +-
 .../hadoop/hbase/regionserver/HStore.html       |  1029 +-
 .../regionserver/MetricsRegionServerSource.html |   384 +-
 .../MetricsRegionServerSourceImpl.html          |   270 +-
 .../MetricsRegionServerWrapper.html             |   334 +-
 ...Impl.RegionServerMetricsWrapperRunnable.html |  1433 +-
 .../MetricsRegionServerWrapperImpl.html         |  1433 +-
 .../regionserver/MetricsRegionSourceImpl.html   |   100 +-
 .../regionserver/MetricsRegionWrapper.html      |    50 +-
 ...apperImpl.HRegionMetricsWrapperRunnable.html |   318 +-
 .../regionserver/MetricsRegionWrapperImpl.html  |   318 +-
 .../apache/hadoop/hbase/regionserver/Store.html |   257 +-
 .../StoreFile.Comparators.GetBulkTime.html      |  2945 +--
 .../StoreFile.Comparators.GetFileSize.html      |  2945 +--
 .../StoreFile.Comparators.GetPathName.html      |  2945 +--
 .../StoreFile.Comparators.GetSeqId.html         |  2945 +--
 .../regionserver/StoreFile.Comparators.html     |  2945 +--
 .../hbase/regionserver/StoreFile.Reader.html    |  2945 +--
 .../hbase/regionserver/StoreFile.Writer.html    |  2945 +--
 .../regionserver/StoreFile.WriterBuilder.html   |  2945 +--
 .../hadoop/hbase/regionserver/StoreFile.html    |  2945 +--
 .../hbase/regionserver/StoreFileInfo.html       |   886 +-
 ...Replication.ReplicationStatisticsThread.html |     2 +-
 .../replication/regionserver/Replication.html   |     2 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   180 +-
 .../tmpl/master/MasterStatusTmpl.Intf.html      |   180 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   180 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    48 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |    60 +-
 .../tmpl/regionserver/RSStatusTmpl.Intf.html    |    60 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    60 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    16 +-
 .../hadoop/hbase/tool/Canary.ExtendedSink.html  |  2226 +-
 .../hadoop/hbase/tool/Canary.Monitor.html       |  2226 +-
 .../hadoop/hbase/tool/Canary.RegionMonitor.html |  2226 +-
 .../hbase/tool/Canary.RegionServerMonitor.html  |  2226 +-
 .../tool/Canary.RegionServerStdOutSink.html     |  2226 +-
 .../hbase/tool/Canary.RegionServerTask.html     |  2226 +-
 .../hbase/tool/Canary.RegionTask.TaskType.html  |  2226 +-
 .../hadoop/hbase/tool/Canary.RegionTask.html    |  2226 +-
 .../apache/hadoop/hbase/tool/Canary.Sink.html   |  2226 +-
 .../hadoop/hbase/tool/Canary.StdOutSink.html    |  2226 +-
 .../org/apache/hadoop/hbase/tool/Canary.html    |  2226 +-
 .../archetypes/exemplars/client/HelloHBase.html |   298 +
 distribution-management.html                    |     6 +-
 export_control.html                             |     6 +-
 hbase-annotations/checkstyle.html               |     6 +-
 hbase-annotations/dependencies.html             |     6 +-
 hbase-annotations/dependency-convergence.html   |    22 +-
 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-archetypes/css/maven-base.css             |   155 +
 hbase-archetypes/css/maven-theme.css            |   141 +
 hbase-archetypes/css/print.css                  |     7 +
 hbase-archetypes/css/site.css                   |     1 +
 hbase-archetypes/dependencies.html              |   377 +
 hbase-archetypes/dependency-convergence.html    |  1493 ++
 hbase-archetypes/dependency-info.html           |   181 +
 hbase-archetypes/dependency-management.html     |   648 +
 hbase-archetypes/distribution-management.html   |   152 +
 .../hbase-archetype-builder/css/maven-base.css  |   155 +
 .../hbase-archetype-builder/css/maven-theme.css |   141 +
 .../hbase-archetype-builder/css/print.css       |     7 +
 .../hbase-archetype-builder/css/site.css        |     1 +
 .../hbase-archetype-builder/dependencies.html   |   365 +
 .../dependency-convergence.html                 |  1481 ++
 .../dependency-info.html                        |   169 +
 .../dependency-management.html                  |   636 +
 .../distribution-management.html                |   140 +
 .../hbase-archetype-builder/images/close.gif    |   Bin 0 -> 279 bytes
 .../images/collapsed.gif                        |   Bin 0 -> 53 bytes
 .../hbase-archetype-builder/images/expanded.gif |   Bin 0 -> 52 bytes
 .../hbase-archetype-builder/images/external.png |   Bin 0 -> 230 bytes
 .../images/icon_error_sml.gif                   |   Bin 0 -> 1010 bytes
 .../images/icon_info_sml.gif                    |   Bin 0 -> 606 bytes
 .../images/icon_success_sml.gif                 |   Bin 0 -> 990 bytes
 .../images/icon_warning_sml.gif                 |   Bin 0 -> 576 bytes
 .../images/logos/build-by-maven-black.png       |   Bin 0 -> 2294 bytes
 .../images/logos/build-by-maven-white.png       |   Bin 0 -> 2260 bytes
 .../images/logos/maven-feather.png              |   Bin 0 -> 3330 bytes
 .../images/newwindow.png                        |   Bin 0 -> 220 bytes
 .../hbase-archetype-builder/index.html          |   133 +
 .../hbase-archetype-builder/integration.html    |   141 +
 .../hbase-archetype-builder/issue-tracking.html |   138 +
 .../hbase-archetype-builder/license.html        |   341 +
 .../hbase-archetype-builder/mail-lists.html     |   190 +
 .../plugin-management.html                      |   273 +
 .../hbase-archetype-builder/plugins.html        |   220 +
 .../hbase-archetype-builder/project-info.html   |   184 +
 .../project-summary.html                        |   177 +
 .../source-repository.html                      |   151 +
 .../hbase-archetype-builder/team-list.html      |   635 +
 .../hbase-client-project/checkstyle.html        |   125 +
 .../hbase-client-project/checkstyle.rss         |    96 +
 .../hbase-client-project/css/maven-base.css     |   155 +
 .../hbase-client-project/css/maven-theme.css    |   141 +
 .../hbase-client-project/css/print.css          |     7 +
 .../hbase-client-project/css/site.css           |     1 +
 .../hbase-client-project/dependencies.html      |  3573 +++
 .../dependency-convergence.html                 |  1484 ++
 .../hbase-client-project/dependency-info.html   |   171 +
 .../dependency-management.html                  |   639 +
 .../distribution-management.html                |   143 +
 .../hbase-client-project/images/close.gif       |   Bin 0 -> 279 bytes
 .../hbase-client-project/images/collapsed.gif   |   Bin 0 -> 53 bytes
 .../hbase-client-project/images/expanded.gif    |   Bin 0 -> 52 bytes
 .../hbase-client-project/images/external.png    |   Bin 0 -> 230 bytes
 .../images/icon_error_sml.gif                   |   Bin 0 -> 1010 bytes
 .../images/icon_info_sml.gif                    |   Bin 0 -> 606 bytes
 .../images/icon_success_sml.gif                 |   Bin 0 -> 990 bytes
 .../images/icon_warning_sml.gif                 |   Bin 0 -> 576 bytes
 .../images/logos/build-by-maven-black.png       |   Bin 0 -> 2294 bytes
 .../images/logos/build-by-maven-white.png       |   Bin 0 -> 2260 bytes
 .../images/logos/maven-feather.png              |   Bin 0 -> 3330 bytes
 .../hbase-client-project/images/newwindow.png   |   Bin 0 -> 220 bytes
 .../hbase-client-project/images/rss.png         |   Bin 0 -> 360 bytes
 .../hbase-client-project/index.html             |   136 +
 .../hbase-client-project/integration.html       |   144 +
 .../hbase-client-project/issue-tracking.html    |   141 +
 .../hbase-client-project/license.html           |   344 +
 .../hbase-client-project/mail-lists.html        |   193 +
 .../hbase-client-project/plugin-management.html |   276 +
 .../hbase-client-project/plugins.html           |   231 +
 .../hbase-client-project/project-info.html      |   187 +
 .../hbase-client-project/project-reports.html   |   103 +
 .../hbase-client-project/project-summary.html   |   183 +
 .../hbase-client-project/source-repository.html |   154 +
 .../hbase-client-project/team-list.html         |   638 +
 hbase-archetypes/images/close.gif               |   Bin 0 -> 279 bytes
 hbase-archetypes/images/collapsed.gif           |   Bin 0 -> 53 bytes
 hbase-archetypes/images/expanded.gif            |   Bin 0 -> 52 bytes
 hbase-archetypes/images/external.png            |   Bin 0 -> 230 bytes
 hbase-archetypes/images/icon_error_sml.gif      |   Bin 0 -> 1010 bytes
 hbase-archetypes/images/icon_info_sml.gif       |   Bin 0 -> 606 bytes
 hbase-archetypes/images/icon_success_sml.gif    |   Bin 0 -> 990 bytes
 hbase-archetypes/images/icon_warning_sml.gif    |   Bin 0 -> 576 bytes
 .../images/logos/build-by-maven-black.png       |   Bin 0 -> 2294 bytes
 .../images/logos/build-by-maven-white.png       |   Bin 0 -> 2260 bytes
 hbase-archetypes/images/logos/maven-feather.png |   Bin 0 -> 3330 bytes
 hbase-archetypes/images/newwindow.png           |   Bin 0 -> 220 bytes
 hbase-archetypes/index.html                     |   158 +
 hbase-archetypes/integration.html               |   153 +
 hbase-archetypes/issue-tracking.html            |   150 +
 hbase-archetypes/license.html                   |   353 +
 hbase-archetypes/mail-lists.html                |   202 +
 hbase-archetypes/modules.html                   |   155 +
 hbase-archetypes/plugin-management.html         |   285 +
 hbase-archetypes/plugins.html                   |   228 +
 hbase-archetypes/project-info.html              |   199 +
 hbase-archetypes/project-summary.html           |   189 +
 hbase-archetypes/source-repository.html         |   163 +
 hbase-archetypes/team-list.html                 |   647 +
 hbase-spark/checkstyle.html                     |     6 +-
 hbase-spark/dependencies.html                   |     6 +-
 hbase-spark/dependency-convergence.html         |    22 +-
 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                                      |     8 +-
 integration.html                                |     6 +-
 issue-tracking.html                             |     6 +-
 license.html                                    |     6 +-
 mail-lists.html                                 |     6 +-
 metrics.html                                    |     6 +-
 modules.html                                    |    15 +-
 old_news.html                                   |     6 +-
 plugin-management.html                          |     6 +-
 plugins.html                                    |     6 +-
 poweredbyhbase.html                             |     6 +-
 project-info.html                               |     6 +-
 project-reports.html                            |     6 +-
 project-summary.html                            |     6 +-
 pseudo-distributed.html                         |     6 +-
 replication.html                                |     6 +-
 resources.html                                  |     6 +-
 source-repository.html                          |     6 +-
 sponsors.html                                   |     6 +-
 supportingprojects.html                         |     6 +-
 team-list.html                                  |     6 +-
 testapidocs/index-all.html                      |     2 +
 .../hadoop/hbase/zookeeper/package-summary.html |     4 +-
 .../hadoop/hbase/zookeeper/package-tree.html    |     4 +-
 .../exemplars/client/package-frame.html         |    12 +
 .../exemplars/client/package-summary.html       |   114 +
 .../exemplars/client/package-tree.html          |   118 +
 .../exemplars/client/package-use.html           |   115 +
 testapidocs/overview-frame.html                 |     1 +
 testapidocs/overview-summary.html               |     4 +
 testapidocs/overview-tree.html                  |     3 +-
 testapidocs/package-list                        |     1 +
 testdevapidocs/allclasses-frame.html            |     1 +
 testdevapidocs/allclasses-noframe.html          |     1 +
 testdevapidocs/index-all.html                   |    52 +
 ...cing.BlockCompactionsInCompletionHStore.html |     2 +-
 .../hbase/class-use/HBaseTestingUtility.html    |    22 +
 .../hadoop/hbase/io/hfile/package-tree.html     |     2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    12 +-
 .../org/apache/hadoop/hbase/package-use.html    |    21 +
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../MetricsRegionServerWrapperStub.html         |   282 +-
 .../regionserver/MetricsRegionWrapperStub.html  |    86 +-
 .../hbase/regionserver/MockStoreFile.html       |     2 +-
 .../regionserver/TestMetricsRegionServer.html   |     4 +-
 ...tricsRegionSourceImpl.RegionWrapperStub.html |    86 +-
 .../regionserver/TestRegionServerMetrics.html   |    30 +-
 .../hadoop/hbase/regionserver/package-tree.html |     4 +-
 .../replication/TestReplicationSmallTests.html  |    63 +-
 .../apache/hadoop/hbase/test/package-tree.html  |     2 +-
 .../hbase/zookeeper/lock/package-summary.html   |     4 +-
 .../hbase/zookeeper/lock/package-tree.html      |     4 +-
 .../exemplars/client/TestHelloHBase.html        |   376 +
 .../client/class-use/TestHelloHBase.html        |   115 +
 .../exemplars/client/package-frame.html         |    18 +
 .../exemplars/client/package-summary.html       |   135 +
 .../exemplars/client/package-tree.html          |   128 +
 .../exemplars/client/package-use.html           |   115 +
 testdevapidocs/overview-frame.html              |     1 +
 testdevapidocs/overview-summary.html            |     4 +
 testdevapidocs/overview-tree.html               |     4 +-
 testdevapidocs/package-list                     |     1 +
 .../MetricsRegionServerWrapperStub.html         |   270 +-
 .../regionserver/MetricsRegionWrapperStub.html  |    56 +-
 .../hbase/regionserver/TestMetricsRegion.html   |    78 +-
 .../regionserver/TestMetricsRegionServer.html   |   148 +-
 ...tricsRegionSourceImpl.RegionWrapperStub.html |    50 +-
 .../TestMetricsRegionSourceImpl.html            |    50 +-
 .../regionserver/TestRegionServerMetrics.html   |   649 +-
 .../replication/TestReplicationSmallTests.html  |  1461 +-
 .../exemplars/client/TestHelloHBase.html        |   203 +
 xref-test/allclasses-frame.html                 |     3 +
 .../MetricsRegionServerWrapperStub.html         |   270 +-
 .../regionserver/MetricsRegionWrapperStub.html  |    56 +-
 .../hbase/regionserver/TestMetricsRegion.html   |    78 +-
 .../regionserver/TestMetricsRegionServer.html   |   148 +-
 .../TestMetricsRegionSourceImpl.html            |    50 +-
 .../regionserver/TestRegionServerMetrics.html   |   649 +-
 .../replication/TestReplicationSmallTests.html  |  1461 +-
 .../exemplars/client/TestHelloHBase.html        |   145 +
 .../exemplars/client/package-frame.html         |    24 +
 .../exemplars/client/package-summary.html       |    67 +
 xref-test/overview-frame.html                   |     3 +
 xref-test/overview-summary.html                 |     5 +
 xref/allclasses-frame.html                      |     3 +
 .../hadoop/hbase/regionserver/HStore.html       |  1029 +-
 .../regionserver/MetricsRegionServerSource.html |   384 +-
 .../MetricsRegionServerSourceImpl.html          |   270 +-
 .../MetricsRegionServerWrapper.html             |   334 +-
 .../MetricsRegionServerWrapperImpl.html         |  1433 +-
 .../regionserver/MetricsRegionSourceImpl.html   |   100 +-
 .../regionserver/MetricsRegionWrapper.html      |    50 +-
 .../regionserver/MetricsRegionWrapperImpl.html  |   318 +-
 .../apache/hadoop/hbase/regionserver/Store.html |   261 +-
 .../hadoop/hbase/regionserver/StoreFile.html    |  2945 +--
 .../hbase/regionserver/StoreFileInfo.html       |   886 +-
 .../replication/regionserver/Replication.html   |     2 +-
 .../hbase/tmpl/common/TaskMonitorTmpl.html      |    90 +-
 .../hbase/tmpl/common/TaskMonitorTmplImpl.html  |    24 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   180 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    48 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    60 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    16 +-
 xref/org/apache/hadoop/hbase/tool/Canary.html   |  2226 +-
 .../archetypes/exemplars/client/HelloHBase.html |   240 +
 .../exemplars/client/package-frame.html         |    24 +
 .../exemplars/client/package-summary.html       |    67 +
 xref/overview-frame.html                        |     3 +
 xref/overview-summary.html                      |     5 +
 396 files changed, 83927 insertions(+), 55256 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index 2baa3e7..f48a6dd 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="20160219" />
+    <meta name="Date-Revision-yyyymmdd" content="20160222" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -187,7 +187,7 @@
                       <li>      <a href="cygwin.html"  target="_blank" title="HBase on Windows">HBase on Windows</a>
 </li>
                   
-                      <li>      <a href="replication.html"  target="_blank" title="Cluster replication">Cluster replication</a>
+                      <li>      <a href="book.html#replication"  target="_blank" title="Cluster replication">Cluster replication</a>
 </li>
                   
                       <li class="dropdown-submenu">
@@ -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-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
             </p>
                 </div>
 


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index a89233d..5b9dfff 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,24 +5,24 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.6, based on Prawn 1.2.1)
 /Producer (Apache HBase Team)
-/CreationDate (D:20160219150222+00'00')
-/ModDate (D:20160219150222+00'00')
+/CreationDate (D:20160222154025+00'00')
+/ModDate (D:20160222154025+00'00')
 >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 3 0 R
 /Names 25 0 R
-/Outlines 3930 0 R
-/PageLabels 4132 0 R
+/Outlines 3935 0 R
+/PageLabels 4137 0 R
 /PageMode /UseOutlines
 /ViewerPreferences [/FitWindow]
 >>
 endobj
 3 0 obj
 << /Type /Pages
-/Count 647
-/Kids [7 0 R 13 0 R 15 0 R 17 0 R 19 0 R 21 0 R 23 0 R 39 0 R 43 0 R 47 0 R 58 0 R 62 0 R 64 0 R 66 0 R 68 0 R 75 0 R 78 0 R 80 0 R 85 0 R 88 0 R 90 0 R 92 0 R 101 0 R 106 0 R 111 0 R 113 0 R 129 0 R 134 0 R 141 0 R 144 0 R 147 0 R 156 0 R 167 0 R 183 0 R 187 0 R 191 0 R 193 0 R 197 0 R 203 0 R 205 0 R 207 0 R 209 0 R 211 0 R 214 0 R 220 0 R 222 0 R 224 0 R 226 0 R 228 0 R 230 0 R 232 0 R 234 0 R 238 0 R 242 0 R 244 0 R 246 0 R 248 0 R 250 0 R 252 0 R 254 0 R 256 0 R 259 0 R 264 0 R 266 0 R 268 0 R 270 0 R 275 0 R 279 0 R 282 0 R 287 0 R 290 0 R 294 0 R 309 0 R 320 0 R 327 0 R 337 0 R 348 0 R 353 0 R 355 0 R 357 0 R 367 0 R 372 0 R 375 0 R 380 0 R 384 0 R 395 0 R 407 0 R 422 0 R 428 0 R 430 0 R 432 0 R 439 0 R 450 0 R 461 0 R 472 0 R 475 0 R 478 0 R 482 0 R 486 0 R 489 0 R 492 0 R 494 0 R 497 0 R 501 0 R 503 0 R 507 0 R 516 0 R 518 0 R 524 0 R 526 0 R 530 0 R 538 0 R 540 0 R 543 0 R 546 0 R 549 0 R 552 0 R 567 0 R 574 0 R 581 0 R 592 0 R 599 0 R 607 0 R 615 0 R 618 0 R 622 0 R 625 0
  R 637 0 R 645 0 R 651 0 R 656 0 R 660 0 R 662 0 R 677 0 R 689 0 R 695 0 R 702 0 R 705 0 R 713 0 R 721 0 R 726 0 R 731 0 R 736 0 R 738 0 R 740 0 R 742 0 R 750 0 R 759 0 R 763 0 R 770 0 R 778 0 R 784 0 R 788 0 R 795 0 R 799 0 R 804 0 R 812 0 R 814 0 R 818 0 R 829 0 R 834 0 R 836 0 R 839 0 R 843 0 R 849 0 R 852 0 R 864 0 R 868 0 R 873 0 R 881 0 R 886 0 R 890 0 R 894 0 R 896 0 R 899 0 R 901 0 R 905 0 R 907 0 R 910 0 R 915 0 R 919 0 R 924 0 R 928 0 R 935 0 R 939 0 R 944 0 R 957 0 R 962 0 R 966 0 R 971 0 R 973 0 R 982 0 R 985 0 R 990 0 R 993 0 R 1002 0 R 1005 0 R 1011 0 R 1018 0 R 1021 0 R 1023 0 R 1032 0 R 1034 0 R 1036 0 R 1039 0 R 1041 0 R 1043 0 R 1045 0 R 1047 0 R 1049 0 R 1052 0 R 1055 0 R 1060 0 R 1063 0 R 1065 0 R 1067 0 R 1069 0 R 1074 0 R 1083 0 R 1086 0 R 1088 0 R 1090 0 R 1095 0 R 1097 0 R 1100 0 R 1102 0 R 1104 0 R 1106 0 R 1109 0 R 1115 0 R 1120 0 R 1127 0 R 1132 0 R 1146 0 R 1157 0 R 1161 0 R 1174 0 R 1183 0 R 1199 0 R 1203 0 R 1213 0 R 1226 0 R 1229 0 R 1241 0 R 1250 0 R 
 1258 0 R 1262 0 R 1271 0 R 1276 0 R 1280 0 R 1286 0 R 1292 0 R 1299 0 R 1307 0 R 1309 0 R 1320 0 R 1322 0 R 1327 0 R 1331 0 R 1336 0 R 1346 0 R 1352 0 R 1358 0 R 1360 0 R 1362 0 R 1374 0 R 1381 0 R 1391 0 R 1397 0 R 1410 0 R 1419 0 R 1423 0 R 1433 0 R 1444 0 R 1447 0 R 1453 0 R 1457 0 R 1460 0 R 1465 0 R 1471 0 R 1475 0 R 1480 0 R 1485 0 R 1488 0 R 1491 0 R 1493 0 R 1502 0 R 1509 0 R 1515 0 R 1520 0 R 1524 0 R 1527 0 R 1533 0 R 1538 0 R 1543 0 R 1545 0 R 1547 0 R 1550 0 R 1552 0 R 1561 0 R 1564 0 R 1570 0 R 1577 0 R 1581 0 R 1586 0 R 1589 0 R 1591 0 R 1596 0 R 1599 0 R 1601 0 R 1603 0 R 1605 0 R 1612 0 R 1623 0 R 1628 0 R 1635 0 R 1638 0 R 1640 0 R 1642 0 R 1644 0 R 1647 0 R 1649 0 R 1651 0 R 1653 0 R 1657 0 R 1661 0 R 1670 0 R 1672 0 R 1674 0 R 1676 0 R 1678 0 R 1684 0 R 1686 0 R 1691 0 R 1693 0 R 1695 0 R 1702 0 R 1707 0 R 1712 0 R 1716 0 R 1719 0 R 1722 0 R 1726 0 R 1728 0 R 1731 0 R 1733 0 R 1735 0 R 1737 0 R 1741 0 R 1743 0 R 1747 0 R 1749 0 R 1751 0 R 1753 0 R 1755 0 R 1760 0 
 R 1762 0 R 1764 0 R 1772 0 R 1782 0 R 1785 0 R 1800 0 R 1815 0 R 1819 0 R 1824 0 R 1827 0 R 1830 0 R 1835 0 R 1837 0 R 1844 0 R 1846 0 R 1849 0 R 1851 0 R 1853 0 R 1855 0 R 1857 0 R 1861 0 R 1863 0 R 1872 0 R 1879 0 R 1885 0 R 1897 0 R 1911 0 R 1922 0 R 1942 0 R 1944 0 R 1946 0 R 1950 0 R 1967 0 R 1974 0 R 1981 0 R 1990 0 R 1995 0 R 2005 0 R 2015 0 R 2020 0 R 2029 0 R 2042 0 R 2059 0 R 2069 0 R 2072 0 R 2081 0 R 2096 0 R 2103 0 R 2106 0 R 2111 0 R 2116 0 R 2126 0 R 2134 0 R 2137 0 R 2139 0 R 2143 0 R 2156 0 R 2164 0 R 2170 0 R 2174 0 R 2177 0 R 2179 0 R 2181 0 R 2183 0 R 2185 0 R 2190 0 R 2192 0 R 2202 0 R 2212 0 R 2219 0 R 2231 0 R 2236 0 R 2240 0 R 2253 0 R 2260 0 R 2266 0 R 2268 0 R 2279 0 R 2286 0 R 2297 0 R 2301 0 R 2310 0 R 2316 0 R 2326 0 R 2334 0 R 2342 0 R 2348 0 R 2353 0 R 2357 0 R 2359 0 R 2366 0 R 2370 0 R 2374 0 R 2380 0 R 2387 0 R 2392 0 R 2396 0 R 2406 0 R 2411 0 R 2416 0 R 2429 0 R 2436 0 R 2440 0 R 2445 0 R 2452 0 R 2455 0 R 2460 0 R 2468 0 R 2474 0 R 2476 0 R 2483 
 0 R 2490 0 R 2497 0 R 2504 0 R 2511 0 R 2518 0 R 2520 0 R 2529 0 R 2535 0 R 2538 0 R 2548 0 R 2552 0 R 2557 0 R 2559 0 R 2568 0 R 2572 0 R 2576 0 R 2578 0 R 2580 0 R 2589 0 R 2595 0 R 2602 0 R 2604 0 R 2610 0 R 2614 0 R 2616 0 R 2623 0 R 2626 0 R 2631 0 R 2636 0 R 2640 0 R 2642 0 R 2647 0 R 2650 0 R 2659 0 R 2661 0 R 2664 0 R 2667 0 R 2669 0 R 2682 0 R 2687 0 R 2692 0 R 2698 0 R 2703 0 R 2718 0 R 2732 0 R 2736 0 R 2751 0 R 2757 0 R 2761 0 R 2777 0 R 2779 0 R 2786 0 R 2795 0 R 2799 0 R 2806 0 R 2813 0 R 2823 0 R 2830 0 R 2837 0 R 2842 0 R 2847 0 R 2849 0 R 2854 0 R 2857 0 R 2863 0 R 2871 0 R 2879 0 R 2885 0 R 2890 0 R 2899 0 R 2907 0 R 2913 0 R 2921 0 R 2926 0 R 2930 0 R 2937 0 R 2941 0 R 2946 0 R 2954 0 R 2956 0 R 2958 0 R 2964 0 R 2966 0 R 2976 0 R 2982 0 R 2987 0 R 2993 0 R 3003 0 R 3010 0 R 3024 0 R 3029 0 R 3040 0 R 3052 0 R 3059 0 R 3061 0 R 3063 0 R 3068 0 R 3086 0 R 3090 0 R 3093 0 R 3098 0 R 3100 0 R 3104 0 R 3106 0 R 3110 0 R 3114 0 R 3118 0 R 3123 0 R 3130 0 R 3136 0 R 314
 0 0 R 3143 0 R 3145 0 R 3148 0 R 3151 0 R 3155 0 R 3163 0 R 3172 0 R 3176 0 R 3181 0 R 3188 0 R 3190 0 R 3199 0 R 3204 0 R 3208 0 R 3214 0 R 3219 0 R 3223 0 R 3228 0 R 3232 0 R 3243 0 R 3256 0 R 3275 0 R 3281 0 R 3284 0 R 3287 0 R 3292 0 R 3297 0 R 3302 0 R 3304 0 R 3306 0 R 3308 0 R 3310 0 R 3312 0 R 3321 0 R 3325 0 R 3333 0 R 3336 0 R 3338 0 R 3345 0 R 3352 0 R 3357 0 R 3360 0 R 3362 0 R 3364 0 R 3366 0 R 3369 0 R 3376 0 R 3383 0 R 3393 0 R 3398 0 R 3401 0 R 3404 0 R 3408 0 R 3412 0 R 3416 0 R 3431 0 R 3435 0 R 3458 0 R 3462 0 R 3466 0 R 3474 0 R 3482 0 R 3491 0 R 3493 0 R 3496 0 R 3499 0 R 3515 0 R 3521 0 R 3528 0 R]
+/Count 648
+/Kids [7 0 R 13 0 R 15 0 R 17 0 R 19 0 R 21 0 R 23 0 R 39 0 R 43 0 R 47 0 R 58 0 R 62 0 R 64 0 R 66 0 R 68 0 R 75 0 R 78 0 R 80 0 R 85 0 R 88 0 R 90 0 R 92 0 R 101 0 R 106 0 R 111 0 R 113 0 R 129 0 R 134 0 R 141 0 R 144 0 R 147 0 R 156 0 R 167 0 R 183 0 R 187 0 R 191 0 R 193 0 R 197 0 R 203 0 R 205 0 R 207 0 R 209 0 R 211 0 R 214 0 R 220 0 R 222 0 R 224 0 R 226 0 R 228 0 R 230 0 R 232 0 R 234 0 R 238 0 R 242 0 R 244 0 R 246 0 R 248 0 R 250 0 R 252 0 R 254 0 R 256 0 R 259 0 R 264 0 R 266 0 R 268 0 R 270 0 R 275 0 R 279 0 R 282 0 R 287 0 R 290 0 R 294 0 R 309 0 R 320 0 R 327 0 R 337 0 R 348 0 R 353 0 R 355 0 R 357 0 R 367 0 R 372 0 R 375 0 R 380 0 R 384 0 R 395 0 R 407 0 R 422 0 R 428 0 R 430 0 R 432 0 R 439 0 R 450 0 R 461 0 R 472 0 R 475 0 R 478 0 R 482 0 R 486 0 R 489 0 R 492 0 R 494 0 R 497 0 R 501 0 R 503 0 R 507 0 R 516 0 R 518 0 R 524 0 R 526 0 R 530 0 R 538 0 R 540 0 R 543 0 R 546 0 R 549 0 R 552 0 R 567 0 R 574 0 R 581 0 R 592 0 R 599 0 R 607 0 R 615 0 R 618 0 R 622 0 R 625 0
  R 637 0 R 645 0 R 651 0 R 656 0 R 660 0 R 662 0 R 677 0 R 689 0 R 695 0 R 702 0 R 705 0 R 713 0 R 721 0 R 726 0 R 731 0 R 736 0 R 738 0 R 740 0 R 742 0 R 750 0 R 759 0 R 763 0 R 770 0 R 778 0 R 784 0 R 788 0 R 795 0 R 799 0 R 804 0 R 812 0 R 814 0 R 818 0 R 829 0 R 834 0 R 836 0 R 839 0 R 843 0 R 849 0 R 852 0 R 864 0 R 868 0 R 873 0 R 881 0 R 886 0 R 890 0 R 894 0 R 896 0 R 899 0 R 901 0 R 905 0 R 907 0 R 910 0 R 915 0 R 919 0 R 924 0 R 928 0 R 935 0 R 939 0 R 944 0 R 957 0 R 962 0 R 966 0 R 971 0 R 973 0 R 982 0 R 985 0 R 990 0 R 993 0 R 1002 0 R 1005 0 R 1011 0 R 1018 0 R 1021 0 R 1023 0 R 1032 0 R 1034 0 R 1036 0 R 1039 0 R 1041 0 R 1043 0 R 1045 0 R 1047 0 R 1049 0 R 1052 0 R 1055 0 R 1060 0 R 1063 0 R 1065 0 R 1067 0 R 1069 0 R 1074 0 R 1083 0 R 1086 0 R 1088 0 R 1090 0 R 1095 0 R 1097 0 R 1100 0 R 1102 0 R 1104 0 R 1106 0 R 1109 0 R 1115 0 R 1120 0 R 1127 0 R 1132 0 R 1146 0 R 1157 0 R 1161 0 R 1174 0 R 1183 0 R 1199 0 R 1203 0 R 1213 0 R 1226 0 R 1229 0 R 1241 0 R 1250 0 R 
 1258 0 R 1262 0 R 1271 0 R 1276 0 R 1280 0 R 1286 0 R 1292 0 R 1299 0 R 1307 0 R 1309 0 R 1320 0 R 1322 0 R 1327 0 R 1331 0 R 1336 0 R 1346 0 R 1352 0 R 1358 0 R 1360 0 R 1362 0 R 1374 0 R 1381 0 R 1391 0 R 1396 0 R 1410 0 R 1418 0 R 1422 0 R 1431 0 R 1439 0 R 1447 0 R 1453 0 R 1457 0 R 1460 0 R 1462 0 R 1471 0 R 1474 0 R 1479 0 R 1485 0 R 1488 0 R 1491 0 R 1493 0 R 1502 0 R 1509 0 R 1515 0 R 1520 0 R 1524 0 R 1527 0 R 1533 0 R 1538 0 R 1543 0 R 1545 0 R 1547 0 R 1550 0 R 1552 0 R 1561 0 R 1564 0 R 1570 0 R 1577 0 R 1581 0 R 1586 0 R 1589 0 R 1591 0 R 1596 0 R 1599 0 R 1601 0 R 1603 0 R 1605 0 R 1612 0 R 1623 0 R 1628 0 R 1635 0 R 1638 0 R 1640 0 R 1642 0 R 1644 0 R 1647 0 R 1649 0 R 1651 0 R 1653 0 R 1657 0 R 1661 0 R 1670 0 R 1672 0 R 1674 0 R 1676 0 R 1678 0 R 1684 0 R 1686 0 R 1691 0 R 1693 0 R 1695 0 R 1702 0 R 1707 0 R 1712 0 R 1716 0 R 1719 0 R 1722 0 R 1726 0 R 1728 0 R 1731 0 R 1733 0 R 1735 0 R 1737 0 R 1741 0 R 1743 0 R 1747 0 R 1749 0 R 1751 0 R 1753 0 R 1755 0 R 1760 0 
 R 1762 0 R 1764 0 R 1772 0 R 1782 0 R 1785 0 R 1800 0 R 1815 0 R 1819 0 R 1824 0 R 1827 0 R 1830 0 R 1835 0 R 1837 0 R 1844 0 R 1846 0 R 1849 0 R 1851 0 R 1853 0 R 1855 0 R 1857 0 R 1861 0 R 1863 0 R 1872 0 R 1879 0 R 1885 0 R 1897 0 R 1911 0 R 1922 0 R 1942 0 R 1944 0 R 1946 0 R 1950 0 R 1967 0 R 1974 0 R 1981 0 R 1990 0 R 1995 0 R 2005 0 R 2015 0 R 2020 0 R 2029 0 R 2042 0 R 2059 0 R 2069 0 R 2072 0 R 2081 0 R 2096 0 R 2103 0 R 2106 0 R 2111 0 R 2116 0 R 2126 0 R 2134 0 R 2137 0 R 2139 0 R 2143 0 R 2156 0 R 2164 0 R 2170 0 R 2174 0 R 2177 0 R 2179 0 R 2181 0 R 2183 0 R 2185 0 R 2190 0 R 2192 0 R 2202 0 R 2212 0 R 2219 0 R 2231 0 R 2236 0 R 2240 0 R 2253 0 R 2260 0 R 2266 0 R 2268 0 R 2279 0 R 2286 0 R 2297 0 R 2301 0 R 2310 0 R 2316 0 R 2326 0 R 2334 0 R 2342 0 R 2348 0 R 2353 0 R 2357 0 R 2359 0 R 2366 0 R 2370 0 R 2374 0 R 2380 0 R 2387 0 R 2392 0 R 2396 0 R 2406 0 R 2411 0 R 2416 0 R 2429 0 R 2436 0 R 2440 0 R 2445 0 R 2452 0 R 2456 0 R 2461 0 R 2469 0 R 2475 0 R 2477 0 R 2484 
 0 R 2491 0 R 2498 0 R 2503 0 R 2511 0 R 2519 0 R 2521 0 R 2530 0 R 2536 0 R 2539 0 R 2549 0 R 2553 0 R 2558 0 R 2560 0 R 2569 0 R 2573 0 R 2577 0 R 2579 0 R 2581 0 R 2590 0 R 2596 0 R 2603 0 R 2605 0 R 2611 0 R 2615 0 R 2617 0 R 2624 0 R 2627 0 R 2632 0 R 2637 0 R 2641 0 R 2643 0 R 2648 0 R 2651 0 R 2660 0 R 2662 0 R 2665 0 R 2668 0 R 2670 0 R 2683 0 R 2688 0 R 2693 0 R 2699 0 R 2704 0 R 2719 0 R 2733 0 R 2737 0 R 2752 0 R 2758 0 R 2762 0 R 2778 0 R 2780 0 R 2787 0 R 2796 0 R 2800 0 R 2807 0 R 2814 0 R 2824 0 R 2831 0 R 2838 0 R 2843 0 R 2848 0 R 2850 0 R 2855 0 R 2858 0 R 2864 0 R 2872 0 R 2880 0 R 2886 0 R 2891 0 R 2900 0 R 2908 0 R 2914 0 R 2922 0 R 2927 0 R 2931 0 R 2938 0 R 2942 0 R 2947 0 R 2955 0 R 2957 0 R 2959 0 R 2965 0 R 2967 0 R 2977 0 R 2983 0 R 2988 0 R 2994 0 R 3004 0 R 3011 0 R 3025 0 R 3030 0 R 3041 0 R 3053 0 R 3060 0 R 3062 0 R 3064 0 R 3069 0 R 3086 0 R 3091 0 R 3095 0 R 3098 0 R 3103 0 R 3105 0 R 3109 0 R 3111 0 R 3115 0 R 3119 0 R 3123 0 R 3128 0 R 3135 0 R 314
 1 0 R 3145 0 R 3148 0 R 3150 0 R 3153 0 R 3156 0 R 3160 0 R 3168 0 R 3177 0 R 3181 0 R 3186 0 R 3193 0 R 3195 0 R 3204 0 R 3209 0 R 3213 0 R 3219 0 R 3224 0 R 3228 0 R 3233 0 R 3237 0 R 3248 0 R 3261 0 R 3280 0 R 3286 0 R 3289 0 R 3292 0 R 3297 0 R 3302 0 R 3307 0 R 3309 0 R 3311 0 R 3313 0 R 3315 0 R 3317 0 R 3326 0 R 3330 0 R 3338 0 R 3341 0 R 3343 0 R 3350 0 R 3357 0 R 3362 0 R 3365 0 R 3367 0 R 3369 0 R 3371 0 R 3374 0 R 3381 0 R 3388 0 R 3398 0 R 3403 0 R 3406 0 R 3409 0 R 3413 0 R 3417 0 R 3421 0 R 3436 0 R 3440 0 R 3463 0 R 3467 0 R 3471 0 R 3479 0 R 3487 0 R 3496 0 R 3498 0 R 3501 0 R 3504 0 R 3520 0 R 3526 0 R 3533 0 R]
 >>
 endobj
 4 0 obj
@@ -180,22 +180,22 @@ endobj
 << /Type /Font
 /BaseFont /AAAAAA+NotoSerif-Bold
 /Subtype /TrueType
-/FontDescriptor 4134 0 R
+/FontDescriptor 4139 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4136 0 R
-/ToUnicode 4135 0 R
+/Widths 4141 0 R
+/ToUnicode 4140 0 R
 >>
 endobj
 11 0 obj
 << /Type /Font
 /BaseFont /AAAAAB+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4138 0 R
+/FontDescriptor 4143 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4140 0 R
-/ToUnicode 4139 0 R
+/Widths 4145 0 R
+/ToUnicode 4144 0 R
 >>
 endobj
 12 0 obj
@@ -17779,7 +17779,7 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [3530 0 R 3531 0 R 3532 0 R 3533 0 R 3534 0 R 3535 0 R 3536 0 R 3537 0 R 3538 0 R 3539 0 R 3540 0 R 3541 0 R 3542 0 R 3543 0 R 3544 0 R 3545 0 R 3546 0 R 3547 0 R 3548 0 R 3549 0 R 3550 0 R 3551 0 R 3552 0 R 3553 0 R 3554 0 R 3555 0 R 3556 0 R 3557 0 R 3558 0 R 3559 0 R 3560 0 R 3561 0 R 3562 0 R 3563 0 R 3564 0 R 3565 0 R 3566 0 R 3567 0 R 3568 0 R 3569 0 R 3570 0 R 3571 0 R 3572 0 R 3573 0 R 3574 0 R 3575 0 R 3576 0 R 3577 0 R 3578 0 R 3579 0 R 3580 0 R 3581 0 R 3582 0 R 3583 0 R 3584 0 R 3585 0 R 3586 0 R 3587 0 R 3588 0 R 3589 0 R 3590 0 R 3591 0 R 3592 0 R 3593 0 R 3594 0 R 3595 0 R 3596 0 R 3597 0 R 3598 0 R 3599 0 R 3600 0 R 3601 0 R 3602 0 R 3603 0 R 3604 0 R 3605 0 R 3606 0 R 3607 0 R 3608 0 R 3609 0 R 3610 0 R 3611 0 R 3612 0 R 3613 0 R]
+/Annots [3535 0 R 3536 0 R 3537 0 R 3538 0 R 3539 0 R 3540 0 R 3541 0 R 3542 0 R 3543 0 R 3544 0 R 3545 0 R 3546 0 R 3547 0 R 3548 0 R 3549 0 R 3550 0 R 3551 0 R 3552 0 R 3553 0 R 3554 0 R 3555 0 R 3556 0 R 3557 0 R 3558 0 R 3559 0 R 3560 0 R 3561 0 R 3562 0 R 3563 0 R 3564 0 R 3565 0 R 3566 0 R 3567 0 R 3568 0 R 3569 0 R 3570 0 R 3571 0 R 3572 0 R 3573 0 R 3574 0 R 3575 0 R 3576 0 R 3577 0 R 3578 0 R 3579 0 R 3580 0 R 3581 0 R 3582 0 R 3583 0 R 3584 0 R 3585 0 R 3586 0 R 3587 0 R 3588 0 R 3589 0 R 3590 0 R 3591 0 R 3592 0 R 3593 0 R 3594 0 R 3595 0 R 3596 0 R 3597 0 R 3598 0 R 3599 0 R 3600 0 R 3601 0 R 3602 0 R 3603 0 R 3604 0 R 3605 0 R 3606 0 R 3607 0 R 3608 0 R 3609 0 R 3610 0 R 3611 0 R 3612 0 R 3613 0 R 3614 0 R 3615 0 R 3616 0 R 3617 0 R 3618 0 R]
 >>
 endobj
 14 0 obj
@@ -34939,7 +34939,7 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [3614 0 R 3615 0 R 3616 0 R 3617 0 R 3618 0 R 3619 0 R 3620 0 R 3621 0 R 3622 0 R 3623 0 R 3624 0 R 3625 0 R 3626 0 R 3627 0 R 3628 0 R 3629 0 R 3630 0 R 3631 0 R 3632 0 R 3633 0 R 3634 0 R 3635 0 R 3636 0 R 3637 0 R 3638 0 R 3639 0 R 3640 0 R 3641 0 R 3642 0 R 3643 0 R 3644 0 R 3645 0 R 3646 0 R 3647 0 R 3648 0 R 3649 0 R 3650 0 R 3651 0 R 3652 0 R 3653 0 R 3654 0 R 3655 0 R 3656 0 R 3657 0 R 3658 0 R 3659 0 R 3660 0 R 3661 0 R 3662 0 R 3663 0 R 3664 0 R 3665 0 R 3666 0 R 3667 0 R 3668 0 R 3669 0 R 3670 0 R 3671 0 R 3672 0 R 3673 0 R 3674 0 R 3675 0 R 3676 0 R 3677 0 R 3678 0 R 3679 0 R 3680 0 R 3681 0 R 3682 0 R 3683 0 R 3684 0 R 3685 0 R 3686 0 R 3687 0 R 3688 0 R 3689 0 R 3690 0 R 3691 0 R 3692 0 R 3693 0 R 3694 0 R 3695 0 R 3696 0 R 3697 0 R 3698 0 R 3699 0 R 3700 0 R 3701 0 R]
+/Annots [3619 0 R 3620 0 R 3621 0 R 3622 0 R 3623 0 R 3624 0 R 3625 0 R 3626 0 R 3627 0 R 3628 0 R 3629 0 R 3630 0 R 3631 0 R 3632 0 R 3633 0 R 3634 0 R 3635 0 R 3636 0 R 3637 0 R 3638 0 R 3639 0 R 3640 0 R 3641 0 R 3642 0 R 3643 0 R 3644 0 R 3645 0 R 3646 0 R 3647 0 R 3648 0 R 3649 0 R 3650 0 R 3651 0 R 3652 0 R 3653 0 R 3654 0 R 3655 0 R 3656 0 R 3657 0 R 3658 0 R 3659 0 R 3660 0 R 3661 0 R 3662 0 R 3663 0 R 3664 0 R 3665 0 R 3666 0 R 3667 0 R 3668 0 R 3669 0 R 3670 0 R 3671 0 R 3672 0 R 3673 0 R 3674 0 R 3675 0 R 3676 0 R 3677 0 R 3678 0 R 3679 0 R 3680 0 R 3681 0 R 3682 0 R 3683 0 R 3684 0 R 3685 0 R 3686 0 R 3687 0 R 3688 0 R 3689 0 R 3690 0 R 3691 0 R 3692 0 R 3693 0 R 3694 0 R 3695 0 R 3696 0 R 3697 0 R 3698 0 R 3699 0 R 3700 0 R 3701 0 R 3702 0 R 3703 0 R 3704 0 R 3705 0 R 3706 0 R]
 >>
 endobj
 16 0 obj
@@ -53747,7 +53747,7 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [3702 0 R 3703 0 R 3704 0 R 3705 0 R 3706 0 R 3707 0 R 3708 0 R 3709 0 R 3710 0 R 3711 0 R 3712 0 R 3713 0 R 3714 0 R 3715 0 R 3716 0 R 3717 0 R 3718 0 R 3719 0 R 3720 0 R 3721 0 R 3722 0 R 3723 0 R 3724 0 R 3725 0 R 3726 0 R 3727 0 R 3728 0 R 3729 0 R 3730 0 R 3731 0 R 3732 0 R 3733 0 R 3734 0 R 3735 0 R 3736 0 R 3737 0 R 3738 0 R 3739 0 R 3740 0 R 3741 0 R 3742 0 R 3743 0 R 3744 0 R 3745 0 R 3746 0 R 3747 0 R 3748 0 R 3749 0 R 3750 0 R 3751 0 R 3752 0 R 3753 0 R 3754 0 R 3755 0 R 3756 0 R 3757 0 R 3758 0 R 3759 0 R 3760 0 R 3761 0 R 3762 0 R 3763 0 R 3764 0 R 3765 0 R 3766 0 R 3767 0 R 3768 0 R 3769 0 R 3770 0 R 3771 0 R 3772 0 R 3773 0 R 3774 0 R 3775 0 R 3776 0 R 3777 0 R 3778 0 R 3779 0 R 3780 0 R 3781 0 R 3782 0 R 3783 0 R 3784 0 R 3785 0 R 3786 0 R 3787 0 R 3788 0 R 3789 0 R]
+/Annots [3707 0 R 3708 0 R 3709 0 R 3710 0 R 3711 0 R 3712 0 R 3713 0 R 3714 0 R 3715 0 R 3716 0 R 3717 0 R 3718 0 R 3719 0 R 3720 0 R 3721 0 R 3722 0 R 3723 0 R 3724 0 R 3725 0 R 3726 0 R 3727 0 R 3728 0 R 3729 0 R 3730 0 R 3731 0 R 3732 0 R 3733 0 R 3734 0 R 3735 0 R 3736 0 R 3737 0 R 3738 0 R 3739 0 R 3740 0 R 3741 0 R 3742 0 R 3743 0 R 3744 0 R 3745 0 R 3746 0 R 3747 0 R 3748 0 R 3749 0 R 3750 0 R 3751 0 R 3752 0 R 3753 0 R 3754 0 R 3755 0 R 3756 0 R 3757 0 R 3758 0 R 3759 0 R 3760 0 R 3761 0 R 3762 0 R 3763 0 R 3764 0 R 3765 0 R 3766 0 R 3767 0 R 3768 0 R 3769 0 R 3770 0 R 3771 0 R 3772 0 R 3773 0 R 3774 0 R 3775 0 R 3776 0 R 3777 0 R 3778 0 R 3779 0 R 3780 0 R 3781 0 R 3782 0 R 3783 0 R 3784 0 R 3785 0 R 3786 0 R 3787 0 R 3788 0 R 3789 0 R 3790 0 R 3791 0 R 3792 0 R 3793 0 R 3794 0 R]
 >>
 endobj
 18 0 obj
@@ -70097,7 +70097,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353539> Tj
+<2e20353630> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -70569,7 +70569,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353631> Tj
+<2e20353632> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -71041,7 +71041,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353633> Tj
+<2e20353634> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -71301,7 +71301,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353635> Tj
+<2e20353636> Tj
 ET
 
 Q
@@ -71318,7 +71318,7 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [3790 0 R 3791 0 R 3792 0 R 3793 0 R 3794 0 R 3795 0 R 3796 0 R 3797 0 R 3798 0 R 3799 0 R 3800 0 R 3801 0 R 3802 0 R 3803 0 R 3804 0 R 3805 0 R 3806 0 R 3807 0 R 3808 0 R 3809 0 R 3810 0 R 3811 0 R 3812 0 R 3813 0 R 3814 0 R 3815 0 R 3816 0 R 3817 0 R 3818 0 R 3819 0 R 3820 0 R 3821 0 R 3822 0 R 3823 0 R 3824 0 R 3825 0 R 3826 0 R 3827 0 R 3828 0 R 3829 0 R 3830 0 R 3831 0 R 3832 0 R 3833 0 R 3834 0 R 3835 0 R 3836 0 R 3837 0 R 3838 0 R 3839 0 R 3840 0 R 3841 0 R 3842 0 R 3843 0 R 3844 0 R 3845 0 R 3846 0 R 3847 0 R 3848 0 R 3849 0 R 3850 0 R 3851 0 R 3852 0 R 3853 0 R 3854 0 R 3855 0 R 3856 0 R 3857 0 R 3858 0 R 3859 0 R 3860 0 R 3861 0 R 3862 0 R 3863 0 R 3864 0 R 3865 0 R 3866 0 R 3867 0 R 3868 0 R 3869 0 R 3870 0 R 3871 0 R 3872 0 R 3873 0 R 3874 0 R 3875 0 R 3876 0 R 3877 0 R 3878 0 R 3879 0 R]
+/Annots [3795 0 R 3796 0 R 3797 0 R 3798 0 R 3799 0 R 3800 0 R 3801 0 R 3802 0 R 3803 0 R 3804 0 R 3805 0 R 3806 0 R 3807 0 R 3808 0 R 3809 0 R 3810 0 R 3811 0 R 3812 0 R 3813 0 R 3814 0 R 3815 0 R 3816 0 R 3817 0 R 3818 0 R 3819 0 R 3820 0 R 3821 0 R 3822 0 R 3823 0 R 3824 0 R 3825 0 R 3826 0 R 3827 0 R 3828 0 R 3829 0 R 3830 0 R 3831 0 R 3832 0 R 3833 0 R 3834 0 R 3835 0 R 3836 0 R 3837 0 R 3838 0 R 3839 0 R 3840 0 R 3841 0 R 3842 0 R 3843 0 R 3844 0 R 3845 0 R 3846 0 R 3847 0 R 3848 0 R 3849 0 R 3850 0 R 3851 0 R 3852 0 R 3853 0 R 3854 0 R 3855 0 R 3856 0 R 3857 0 R 3858 0 R 3859 0 R 3860 0 R 3861 0 R 3862 0 R 3863 0 R 3864 0 R 3865 0 R 3866 0 R 3867 0 R 3868 0 R 3869 0 R 3870 0 R 3871 0 R 3872 0 R 3873 0 R 3874 0 R 3875 0 R 3876 0 R 3877 0 R 3878 0 R 3879 0 R 3880 0 R 3881 0 R 3882 0 R 3883 0 R 3884 0 R]
 >>
 endobj
 20 0 obj
@@ -71825,7 +71825,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353637> Tj
+<2e20353638> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -72145,7 +72145,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353639> Tj
+<2e20353730> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -72457,7 +72457,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353730> Tj
+<2e20353731> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -72945,7 +72945,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353737> Tj
+<2e20353738> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -73409,7 +73409,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353738> Tj
+<2e20353739> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -73829,7 +73829,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353739> Tj
+<2e20353830> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -74213,7 +74213,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353830> Tj
+<2e20353831> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -74713,7 +74713,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353830> Tj
+<2e20353831> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -75013,7 +75013,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353831> Tj
+<2e20353832> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -75461,7 +75461,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353931> Tj
+<2e20353932> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -75857,7 +75857,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353934> Tj
+<2e20353935> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -76209,7 +76209,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20353939> Tj
+<2e20363030> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -76417,7 +76417,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363035> Tj
+<2e20363036> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -76781,7 +76781,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363137> Tj
+<2e20363138> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -77165,7 +77165,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363138> Tj
+<2e20363139> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -77605,7 +77605,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363139> Tj
+<2e20363230> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -78005,7 +78005,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363230> Tj
+<2e20363231> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -78305,7 +78305,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363239> Tj
+<2e20363330> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -78701,7 +78701,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363331> Tj
+<2e20363332> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -78933,7 +78933,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363332> Tj
+<2e20363333> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -79297,7 +79297,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363333> Tj
+<2e20363334> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -79553,7 +79553,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363334> Tj
+<2e20363335> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -79957,7 +79957,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363336> Tj
+<2e20363337> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -80333,7 +80333,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363337> Tj
+<2e20363338> Tj
 ET
 
 0.259 0.545 0.792 scn
@@ -80681,7 +80681,7 @@ BT
 /F1.1 10.5 Tf
 <28> Tj
 /F1.0 10.5 Tf
-<2e20363338> Tj
+<2e20363339> Tj
 ET
 
 Q
@@ -80698,7 +80698,7 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [3880 0 R 3881 0 R 3882 0 R 3883 0 R 3884 0 R 3885 0 R 3886 0 R 3887 0 R 3888 0 R 3889 0 R 3890 0 R 3891 0 R 3892 0 R 3893 0 R 3894 0 R 3895 0 R 3896 0 R 3897 0 R 3898 0 R 3899 0 R 3900 0 R 3901 0 R 3902 0 R 3903 0 R 3904 0 R 3905 0 R 3906 0 R 3907 0 R 3908 0 R 3909 0 R 3910 0 R 3911 0 R 3912 0 R 3913 0 R 3914 0 R 3915 0 R 3916 0 R 3917 0 R 3918 0 R 3919 0 R 3920 0 R 3921 0 R 3922 0 R 3923 0 R 3924 0 R 3925 0 R 3926 0 R 3927 0 R 3928 0 R 3929 0 R]
+/Annots [3885 0 R 3886 0 R 3887 0 R 3888 0 R 3889 0 R 3890 0 R 3891 0 R 3892 0 R 3893 0 R 3894 0 R 3895 0 R 3896 0 R 3897 0 R 3898 0 R 3899 0 R 3900 0 R 3901 0 R 3902 0 R 3903 0 R 3904 0 R 3905 0 R 3906 0 R 3907 0 R 3908 0 R 3909 0 R 3910 0 R 3911 0 R 3912 0 R 3913 0 R 3914 0 R 3915 0 R 3916 0 R 3917 0 R 3918 0 R 3919 0 R 3920 0 R 3921 0 R 3922 0 R 3923 0 R 3924 0 R 3925 0 R 3926 0 R 3927 0 R 3928 0 R 3929 0 R 3930 0 R 3931 0 R 3932 0 R 3933 0 R 3934 0 R]
 >>
 endobj
 22 0 obj
@@ -81480,7 +81480,7 @@ endobj
 >>
 endobj
 26 0 obj
-<< /Kids [1190 0 R 2488 0 R 1191 0 R 2034 0 R 3295 0 R]
+<< /Kids [1190 0 R 2489 0 R 1191 0 R 2034 0 R 3300 0 R]
 >>
 endobj
 27 0 obj
@@ -81531,11 +81531,11 @@ endobj
 << /Type /Font
 /BaseFont /AAAAAC+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 4142 0 R
+/FontDescriptor 4147 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4144 0 R
-/ToUnicode 4143 0 R
+/Widths 4149 0 R
+/ToUnicode 4148 0 R
 >>
 endobj
 32 0 obj
@@ -81561,11 +81561,11 @@ endobj
 << /Type /Font
 /BaseFont /AAAAAD+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4146 0 R
+/FontDescriptor 4151 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4148 0 R
-/ToUnicode 4147 0 R
+/Widths 4153 0 R
+/ToUnicode 4152 0 R
 >>
 endobj
 35 0 obj
@@ -81982,11 +81982,11 @@ endobj
 << /Type /Font
 /BaseFont /AAAAAE+NotoSerif-Italic
 /Subtype /TrueType
-/FontDescriptor 4150 0 R
+/FontDescriptor 4155 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4152 0 R
-/ToUnicode 4151 0 R
+/Widths 4157 0 R
+/ToUnicode 4156 0 R
 >>
 endobj
 41 0 obj
@@ -109992,12 +109992,12 @@ endobj
 endobj
 169 0 obj
 << /Limits [(acid) (api-before-hbase-1-0-0)]
-/Names [(acid) 626 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3008 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3011 0 R (add.metrics) 3006 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3229 0 R (adding.new.node) 2555 0 R (administration) 1037 0 R (administration-2) 1061 0 R (administration-3) 1091 0 R (amazon-ec2) 3266 0 R (api-as-of-hbase-1-0-0) 1140 0 R (api-before-hbase-1-0-0) 1142 0 R]
+/Names [(acid) 626 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3009 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3012 0 R (add.metrics) 3007 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3234 0 R (adding.new.node) 2556 0 R (administration) 1037 0 R (administration-2) 1061 0 R (administration-3) 1091 0 R (amazon-ec2) 3271 0 R (api-as-of-hbase-1-0-0) 1140 0 R (api-before-hbase-1-0-0) 1142 0 R]
 >>
 endobj
 170 0 obj
 << /Limits [(hadoop.security) (hbase.env.sh)]
-/Names [(hadoop.security) 157 0 R (hadoop2.hbase_0.94) 145 0 R (handling-of-errors-during-log-splitting) 1310 0 R (hardware) 2400 0 R (hbase-and-hdfs) 2354 0 R (hbase-as-a-mapreduce-job-data-source-and-data-sink) 853 0 R (hbase-hot-spot-region) 2403 0 R (hbase-in-action) 3272 0 R (hbase-managed-zookeeper-configuration) 3137 0 R (hbase-metrics) 2560 0 R (hbase-reference-guide-style-guide-and-cheat-sheet) 3195 0 R (hbase-region-with-non-local-data) 2404 0 R (hbase.accesscontrol.configuration) 1015 0 R (hbase.client.api.surface) 376 0 R (hbase.commit.msg.format) 3177 0 R (hbase.encryption.server) 1080 0 R (hbase.env.sh) 271 0 R]
+/Names [(hadoop.security) 157 0 R (hadoop2.hbase_0.94) 145 0 R (handling-of-errors-during-log-splitting) 1310 0 R (hardware) 2400 0 R (hbase-and-hdfs) 2354 0 R (hbase-as-a-mapreduce-job-data-source-and-data-sink) 853 0 R (hbase-hot-spot-region) 2403 0 R (hbase-in-action) 3277 0 R (hbase-managed-zookeeper-configuration) 3142 0 R (hbase-metrics) 2561 0 R (hbase-reference-guide-style-guide-and-cheat-sheet) 3200 0 R (hbase-region-with-non-local-data) 2404 0 R (hbase.accesscontrol.configuration) 1015 0 R (hbase.archetypes.development) 3082 0 R (hbase.client.api.surface) 376 0 R (hbase.commit.msg.format) 3182 0 R (hbase.encryption.server) 1080 0 R (hbase.env.sh) 271 0 R]
 >>
 endobj
 171 0 obj
@@ -132682,7 +132682,7 @@ endobj
 endobj
 292 0 obj
 << /Limits [(jdo) (keysize.attributes)]
-/Names [(jdo) 1662 0 R (jira) 2771 0 R (jmx_config) 349 0 R (joins) 623 0 R (junit) 3087 0 R (jvm) 1898 0 R (jython) 1687 0 R (jython-code-examples) 1689 0 R (keeping-track-of-logs) 2632 0 R (keysize) 674 0 R (keysize.attributes) 684 0 R]
+/Names [(jdo) 1662 0 R (jira) 2772 0 R (jmx_config) 349 0 R (joins) 623 0 R (junit) 3092 0 R (jvm) 1898 0 R (jython) 1687 0 R (jython-code-examples) 1689 0 R (keeping-track-of-logs) 2633 0 R (keysize) 674 0 R (keysize.attributes) 684 0 R]
 >>
 endobj
 293 0 obj
@@ -134060,7 +134060,7 @@ endobj
 endobj
 317 0 obj
 << /Limits [(connection-setup) (datamodel)]
-/Names [(connection-setup) 3513 0 R (constraints) 760 0 R (contributing-to-documentation-or-other-strings) 3186 0 R (coprocessor-implementation-overview) 1776 0 R (coprocessor-overview) 1773 0 R (coprocessors) 1238 0 R (copytable) 2472 0 R (count) 513 0 R (counters) 718 0 R (cp) 1765 0 R (cp_analogies) 1775 0 R (cp_example) 1838 0 R (cp_loading) 1816 0 R (creating-a-table-with-region-replication) 1554 0 R (current-limitations) 609 0 R (custom-split-policies) 1370 0 R (data-model-operations) 553 0 R (data.block.encoding.enable) 3367 0 R (data.blocks.in.fscache) 1265 0 R (datamodel) 514 0 R]
+/Names [(connection-setup) 3518 0 R (constraints) 760 0 R (contributing-to-documentation-or-other-strings) 3191 0 R (coprocessor-implementation-overview) 1776 0 R (coprocessor-overview) 1773 0 R (coprocessors) 1238 0 R (copytable) 2473 0 R (count) 513 0 R (counters) 718 0 R (cp) 1765 0 R (cp_analogies) 1775 0 R (cp_example) 1838 0 R (cp_loading) 1816 0 R (creating-a-table-with-region-replication) 1554 0 R (current-limitations) 609 0 R (custom-split-policies) 1370 0 R (data-model-operations) 553 0 R (data.block.encoding.enable) 3372 0 R (data.blocks.in.fscache) 1265 0 R (datamodel) 514 0 R]
 >>
 endobj
 318 0 obj
@@ -136672,7 +136672,7 @@ endobj
 endobj
 340 0 obj
 << /Limits [(recommended.configurations.hdfs) (regionserver.arch.processes.memstore)]
-/Names [(recommended.configurations.hdfs) 312 0 R (recommended_configurations.zk) 306 0 R (region-overlap-repairs) 3285 0 R (region-replication-for-meta-table-s-region) 1535 0 R (regions.arch) 1337 0 R (regions.arch.assignment) 1348 0 R (regions.arch.assignment.failover) 1350 0 R (regions.arch.assignment.startup) 1349 0 R (regions.arch.balancer) 1353 0 R (regions.arch.locality) 1363 0 R (regions.arch.states) 1355 0 R (regionserver.arch) 1230 0 R (regionserver.arch.api) 1232 0 R (regionserver.arch.processes) 1233 0 R (regionserver.arch.processes.compactsplit) 1234 0 R (regionserver.arch.processes.log) 1237 0 R (regionserver.arch.processes.majorcompact) 1235 0 R (regionserver.arch.processes.memstore) 1236 0 R]
+/Names [(recommended.configurations.hdfs) 312 0 R (recommended_configurations.zk) 306 0 R (region-overlap-repairs) 3290 0 R (region-replication-for-meta-table-s-region) 1535 0 R (regions.arch) 1337 0 R (regions.arch.assignment) 1348 0 R (regions.arch.assignment.failover) 1350 0 R (regions.arch.assignment.startup) 1349 0 R (regions.arch.balancer) 1353 0 R (regions.arch.locality) 1363 0 R (regions.arch.states) 1355 0 R (regionserver.arch) 1230 0 R (regionserver.arch.api) 1232 0 R (regionserver.arch.processes) 1233 0 R (regionserver.arch.processes.compactsplit) 1234 0 R (regionserver.arch.processes.log) 1237 0 R (regionserver.arch.processes.majorcompact) 1235 0 R (regionserver.arch.processes.memstore) 1236 0 R]
 >>
 endobj
 341 0 obj
@@ -149119,18 +149119,18 @@ endobj
 endobj
 434 0 obj
 << /Limits [(thrift) (trouble.client.lease.exception)]
-/Names [(thrift) 1696 0 R (thrift) 1654 0 R (thrift.filter_language) 1703 0 R (timeline-consistency) 1518 0 R (timeseries) 667 0 R (todo) 3509 0 R (too_many_regions) 1342 0 R (tools) 2430 0 R (tracing) 3483 0 R (tracing.client.modifications) 3494 0 R (tracing.client.shell) 3497 0 R (tracing.spanreceivers) 3486 0 R (tradeoffs) 1525 0 R (trafodion) 3373 0 R (trouble) 2114 0 R (trouble.casestudy) 2367 0 R (trouble.client) 2193 0 R (trouble.client.lease.exception) 2203 0 R]
+/Names [(thrift) 1696 0 R (thrift) 1654 0 R (thrift.filter_language) 1703 0 R (timeline-consistency) 1518 0 R (timeseries) 667 0 R (todo) 3514 0 R (too_many_regions) 1342 0 R (tools) 2430 0 R (tracing) 3488 0 R (tracing.client.modifications) 3499 0 R (tracing.client.shell) 3502 0 R (tracing.spanreceivers) 3491 0 R (tradeoffs) 1525 0 R (trafodion) 3378 0 R (treat-read-write-failure-as-error) 2453 0 R (trouble) 2114 0 R (trouble.casestudy) 2367 0 R (trouble.client) 2193 0 R (trouble.client.lease.exception) 2203 0 R]
 >>
 endobj
 435 0 obj
 << /Type /Font
 /BaseFont /AAAAAF+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 4154 0 R
+/FontDescriptor 4159 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4156 0 R
-/ToUnicode 4155 0 R
+/Widths 4161 0 R
+/ToUnicode 4160 0 R
 >>
 endobj
 436 0 obj
@@ -169071,7 +169071,7 @@ endobj
 endobj
 554 0 obj
 << /Limits [(distributed.log.replay) (dynamic-unloading)]
-/Names [(distributed.log.replay) 1328 0 R (dm.column.metadata) 619 0 R (dm.sort) 616 0 R (do-not-edit-jira-comments) 3078 0 R (documentation) 2886 0 R (draining.servers) 2536 0 R (driver) 2457 0 R (dyn_config) 358 0 R (dynamic-loading) 1821 0 R (dynamic-unloading) 1831 0 R]
+/Names [(distributed.log.replay) 1328 0 R (dm.column.metadata) 619 0 R (dm.sort) 616 0 R (do-not-edit-jira-comments) 3079 0 R (documentation) 2887 0 R (draining.servers) 2537 0 R (driver) 2458 0 R (dyn_config) 358 0 R (dynamic-loading) 1821 0 R (dynamic-unloading) 1831 0 R]
 >>
 endobj
 555 0 obj
@@ -174864,7 +174864,7 @@ endobj
 endobj
 595 0 obj
 << /Limits [(output) (perf.hbase.client.autoflush)]
-/Names [(output) 2591 0 R (package) 2818 0 R (page-allocation-failure) 2376 0 R (passing-vm-options-to-the-shell) 495 0 R (perf.batch.loading) 1997 0 R (perf.casestudy) 2112 0 R (perf.compactions.and.splits) 1914 0 R (perf.compression) 1983 0 R (perf.compression.however) 1986 0 R (perf.configurations) 1912 0 R (perf.deleting) 2073 0 R (perf.deleting.queue) 2074 0 R (perf.deleting.rpc) 2078 0 R (perf.ec2) 2104 0 R (perf.general) 1991 0 R (perf.general.constants) 1992 0 R (perf.handlers) 1915 0 R (perf.hbase.client.autoflush) 2006 0 R]
+/Names [(output) 2592 0 R (package) 2819 0 R (page-allocation-failure) 2376 0 R (passing-vm-options-to-the-shell) 495 0 R (perf.batch.loading) 1997 0 R (perf.casestudy) 2112 0 R (perf.compactions.and.splits) 1914 0 R (perf.compression) 1983 0 R (perf.compression.however) 1986 0 R (perf.configurations) 1912 0 R (perf.deleting) 2073 0 R (perf.deleting.queue) 2074 0 R (perf.deleting.rpc) 2078 0 R (perf.ec2) 2104 0 R (perf.general) 1991 0 R (perf.general.constants) 1992 0 R (perf.handlers) 1915 0 R (perf.hbase.client.autoflush) 2006 0 R]
 >>
 endobj
 596 0 obj
@@ -182781,7 +182781,7 @@ endobj
 endobj
 668 0 obj
 << /Limits [(upgrade1.0.rolling.upgrade) (versions)]
-/Names [(upgrade1.0.rolling.upgrade) 408 0 R (upgrading) 361 0 R (upgrading-2) 3241 0 R (upgrading-code-meta-code-to-use-protocol-buffers-protobuf) 436 0 R (upgrading-from-0-94-x-to-0-98-x) 418 0 R (use-cases-for-observer-coprocessors) 1790 0 R (user-interface) 1553 0 R (using-existing-zookeeper-ensemble) 3124 0 R (using-hbase-shell) 1822 0 R (using-hbase-shell-2) 1832 0 R (using-rest-endpoints) 1620 0 R (using-secure-http-https-for-the-web-ui) 925 0 R (using-the-code-rolling-restart-sh-code-script) 2546 0 R (using-the-java-api) 1833 0 R (using-the-java-api-all-hbase-versions) 1825 0 R (using-the-java-api-hbase-0-96-only) 1828 0 R (verifying-replicated-data) 2617 0 R (version.delete) 600 0 R (versioned-get-example) 593 0 R (versions) 575 0 R]
+/Names [(upgrade1.0.rolling.upgrade) 408 0 R (upgrading) 361 0 R (upgrading-2) 3246 0 R (upgrading-code-meta-code-to-use-protocol-buffers-protobuf) 436 0 R (upgrading-from-0-94-x-to-0-98-x) 418 0 R (use-cases-for-observer-coprocessors) 1790 0 R (user-interface) 1553 0 R (using-existing-zookeeper-ensemble) 3129 0 R (using-hbase-shell) 1822 0 R (using-hbase-shell-2) 1832 0 R (using-rest-endpoints) 1620 0 R (using-secure-http-https-for-the-web-ui) 925 0 R (using-the-code-rolling-restart-sh-code-script) 2547 0 R (using-the-java-api) 1833 0 R (using-the-java-api-all-hbase-versions) 1825 0 R (using-the-java-api-hbase-0-96-only) 1828 0 R (verifying-replicated-data) 2618 0 R (version.delete) 600 0 R (versioned-get-example) 593 0 R (versions) 575 0 R]
 >>
 endobj
 669 0 obj
@@ -187649,7 +187649,7 @@ endobj
 endobj
 699 0 obj
 << /Limits [(chaos.monkey.properties) (client.filter)]
-/Names [(chaos.monkey.properties) 2960 0 R (checking-for-success-or-failure-in-scripts) 487 0 R (choosing-region-servers-to-replicate-to) 2629 0 R (cleaning-logs) 2637 0 R (client) 3516 0 R (client-side-configuration-for-secure-operation) 936 0 R (client-side-configuration-for-secure-operation-rest-gateway) 960 0 R (client-side-configuration-for-simple-user-access-operation) 983 0 R (client-side-configuration-for-simple-user-access-operation-rest-gateway) 988 0 R (client-side-configuration-for-simple-user-access-operation-thrift-gateway) 986 0 R (client-side-properties) 1548 0 R (client.connection.pooling) 1148 0 R (client.connections) 1137 0 R (client.external) 1158 0 R (client.filter) 1162 0 R]
+/Names [(chaos.monkey.properties) 2961 0 R (checking-for-success-or-failure-in-scripts) 487 0 R (choosing-region-servers-to-replicate-to) 2630 0 R (cleaning-logs) 2638 0 R (client) 3521 0 R (client-side-configuration-for-secure-operation) 936 0 R (client-side-configuration-for-secure-operation-rest-gateway) 960 0 R (client-side-configuration-for-simple-user-access-operation) 983 0 R (client-side-configuration-for-simple-user-access-operation-rest-gateway) 988 0 R (client-side-configuration-for-simple-user-access-operation-thrift-gateway) 986 0 R (client-side-properties) 1548 0 R (client.connection.pooling) 1148 0 R (client.connections) 1137 0 R (client.external) 1158 0 R (client.filter) 1162 0 R]
 >>
 endobj
 700 0 obj
@@ -192796,7 +192796,7 @@ endobj
 endobj
 723 0 obj
 << /Limits [(rpc) (schema)]
-/Names [(rpc) 3510 0 R (rpc.configs) 3529 0 R (rpc.logging) 2132 0 R (rs.failover.details) 2638 0 R (rs_metrics) 2574 0 R (run-canary-test-as-daemon-mode) 2447 0 R (run.insitu) 3005 0 R (running-canary-in-a-kerberos-enabled-cluster) 2453 0 R (running-hbck-to-identify-inconsistencies) 3277 0 R (running-multiple-workloads-on-a-single-cluster) 2651 0 R (running-the-shell-in-non-interactive-mode) 479 0 R (s096.migration.troubleshooting) 433 0 R (scala) 1679 0 R (scala-sbt-file) 1681 0 R (scan) 563 0 R (scans) 1633 0 R (scenario) 2399 0 R (schema) 629 0 R]
+/Names [(rpc) 3515 0 R (rpc.configs) 3534 0 R (rpc.logging) 2132 0 R (rs.failover.details) 2639 0 R (rs_metrics) 2575 0 R (run-canary-test-as-daemon-mode) 2447 0 R (run.insitu) 3006 0 R (running-canary-in-a-kerberos-enabled-cluster) 2454 0 R (running-hbck-to-identify-inconsistencies) 3282 0 R (running-multiple-workloads-on-a-single-cluster) 2652 0 R (running-the-shell-in-non-interactive-mode) 479 0 R (s096.migration.troubleshooting) 433 0 R (scala) 1679 0 R (scala-sbt-file) 1681 0 R (scan) 563 0 R (scans) 1633 0 R (scenario) 2399 0 R (schema) 629 0 R]
 >>
 endobj
 724 0 obj
@@ -211019,7 +211019,7 @@ endobj
 endobj
 791 0 obj
 << /Limits [(schema.casestudies.log_timeseries.hostlead) (scripting)]
-/Names [(schema.casestudies.log_timeseries.hostlead) 771 0 R (schema.casestudies.log_timeseries.revts) 772 0 R (schema.casestudies.log_timeseries.tslead) 767 0 R (schema.casestudies.log_timeseries.varkeys) 776 0 R (schema.cf.blocksize) 1975 0 R (schema.creation) 638 0 R (schema.joins) 722 0 R (schema.minversions) 710 0 R (schema.ops) 819 0 R (schema.regionsize) 1957 0 R (schema.smackdown) 805 0 R (schema.smackdown.rowsascols) 808 0 R (schema.smackdown.rowscols) 807 0 R (schema.smackdown.rowsversions) 806 0 R (schema.updates) 642 0 R (schema.versions) 706 0 R (schema.versions.max) 707 0 R (scopes) 3299 0 R (scripting) 476 0 R]
+/Names [(schema.casestudies.log_timeseries.hostlead) 771 0 R (schema.casestudies.log_timeseries.revts) 772 0 R (schema.casestudies.log_timeseries.tslead) 767 0 R (schema.casestudies.log_timeseries.varkeys) 776 0 R (schema.cf.blocksize) 1975 0 R (schema.creation) 638 0 R (schema.joins) 722 0 R (schema.minversions) 710 0 R (schema.ops) 819 0 R (schema.regionsize) 1957 0 R (schema.smackdown) 805 0 R (schema.smackdown.rowsascols) 808 0 R (schema.smackdown.rowscols) 807 0 R (schema.smackdown.rowsversions) 806 0 R (schema.updates) 642 0 R (schema.versions) 706 0 R (schema.versions.max) 707 0 R (scopes) 3304 0 R (scripting) 476 0 R]
 >>
 endobj
 792 0 obj
@@ -216747,7 +216747,7 @@ endobj
 endobj
 831 0 obj
 << /Limits [(hbase.versioning.post10) (health.check)]
-/Names [(hbase.versioning.post10) 369 0 R (hbase.versioning.pre10) 381 0 R (hbase_apis) 1592 0 R (hbase_default_configurations) 201 0 R (hbase_env) 291 0 R (hbase_mob) 1571 0 R (hbase_site) 285 0 R (hbck) 2461 0 R (hbck.in.depth) 3276 0 R (health.check) 2456 0 R]
+/Names [(hbase.versioning.post10) 369 0 R (hbase.versioning.pre10) 381 0 R (hbase_apis) 1592 0 R (hbase_default_configurations) 201 0 R (hbase_env) 291 0 R (hbase_mob) 1571 0 R (hbase_site) 285 0 R (hbck) 2462 0 R (hbck.in.depth) 3281 0 R (health.check) 2457 0 R]
 >>
 endobj
 832 0 obj
@@ -218722,7 +218722,7 @@ endobj
 endobj
 845 0 obj
 << /Limits [(managed.compactions) (mapreduce.example.summary.noreducer)]
-/Names [(managed.compactions) 328 0 R (managing-and-configuring-cluster-replication) 2612 0 R (manual_region_splitting_decisions) 1377 0 R (manually-compacting-mob-files) 1583 0 R (mapreduce) 821 0 R (mapreduce-2) 3260 0 R (mapreduce-scan-caching) 844 0 R (mapreduce.example) 882 0 R (mapreduce.example.read) 883 0 R (mapreduce.example.readwrite) 887 0 R (mapreduce.example.readwrite.multi) 891 0 R (mapreduce.example.summary) 892 0 R (mapreduce.example.summary.file) 897 0 R (mapreduce.example.summary.noreducer) 902 0 R]
+/Names [(managed.compactions) 328 0 R (managing-and-configuring-cluster-replication) 2613 0 R (manual_region_splitting_decisions) 1377 0 R (manually-compacting-mob-files) 1583 0 R (mapreduce) 821 0 R (mapreduce-2) 3265 0 R (mapreduce-scan-caching) 844 0 R (mapreduce.example) 882 0 R (mapreduce.example.read) 883 0 R (mapreduce.example.readwrite) 887 0 R (mapreduce.example.readwrite.multi) 891 0 R (mapreduce.example.summary) 892 0 R (mapreduce.example.summary.file) 897 0 R (mapreduce.example.summary.noreducer) 902 0 R]
 >>
 endobj
 846 0 obj
@@ -220576,7 +220576,7 @@ endobj
 endobj
 876 0 obj
 << /Limits [(simple-versus-secure-access) (special-cases-meta-is-not-properly-assigned)]
-/Names [(simple-versus-secure-access) 976 0 R (slowness-due-to-high-processor-usage) 2408 0 R (snapshot-errors-due-to-reverse-dns) 2313 0 R (spark) 1723 0 R (spark-streaming) 1738 0 R (sparksql-dataframes) 1756 0 R (spec.ex) 332 0 R (special-case-root-and-meta-are-corrupt) 3290 0 R (special-cases-hbase-version-file-is-missing) 3289 0 R (special-cases-meta-is-not-properly-assigned) 3288 0 R]
+/Names [(simple-versus-secure-access) 976 0 R (slowness-due-to-high-processor-usage) 2408 0 R (snapshot-errors-due-to-reverse-dns) 2313 0 R (spark) 1723 0 R (spark-streaming) 1738 0 R (sparksql-dataframes) 1756 0 R (spec.ex) 332 0 R (special-case-root-and-meta-are-corrupt) 3295 0 R (special-cases-hbase-version-file-is-missing) 3294 0 R (special-cases-meta-is-not-properly-assigned) 3293 0 R]
 >>
 endobj
 877 0 obj
@@ -250098,11 +250098,11 @@ endobj
 << /Type /Font
 /BaseFont /AAAAAG+mplus1mn-italic
 /Subtype /TrueType
-/FontDescriptor 4158 0 R
+/FontDescriptor 4163 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4160 0 R
-/ToUnicode 4159 0 R
+/Widths 4165 0 R
+/ToUnicode 4164 0 R
 >>
 endobj
 942 0 obj
@@ -252317,11 +252317,11 @@ endobj
 << /Type /Font
 /BaseFont /AAAAAH+mplus1mn-bold
 /Subtype /TrueType
-/FontDescriptor 4162 0 R
+/FontDescriptor 4167 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4164 0 R
-/ToUnicode 4163 0 R
+/Widths 4169 0 R
+/ToUnicode 4168 0 R
 >>
 endobj
 959 0 obj
@@ -258072,7 +258072,7 @@ endobj
 endobj
 1000 0 obj
 << /Limits [(security) (server-side-configuration-3)]
-/Names [(security) 920 0 R (security.client.thrift) 940 0 R (security.example.config) 1098 0 R (security.gateway.thrift) 945 0 R (security.gateway.thrift.doas) 953 0 R (security.prerequisites) 931 0 R (security.rest.gateway) 969 0 R (server) 3517 0 R (server-side-configuration) 1027 0 R (server-side-configuration-2) 1057 0 R (server-side-configuration-3) 1084 0 R]
+/Names [(security) 920 0 R (security.client.thrift) 940 0 R (security.example.config) 1098 0 R (security.gateway.thrift) 945 0 R (security.gateway.thrift.doas) 953 0 R (security.prerequisites) 931 0 R (security.rest.gateway) 969 0 R (server) 3522 0 R (server-side-configuration) 1027 0 R (server-side-configuration-2) 1057 0 R (server-side-configuration-3) 1084 0 R]
 >>
 endobj
 1001 0 obj
@@ -303616,7 +303616,7 @@ endobj
 endobj
 1113 0 obj
 << /Limits [(basic-distributed-hbase-install) (blockcache.prefetch)]
-/Names [(basic-distributed-hbase-install) 284 0 R (basic-spark) 1729 0 R (basic.prerequisites) 114 0 R (big.cluster.config) 299 0 R (big_memory) 316 0 R (block-cache-monitoring) 2593 0 R (block-index-format-in-version-1) 3390 0 R (block-index-in-version-2) 3399 0 R (block.cache) 1242 0 R (block.cache.design) 1253 0 R (block.cache.usage) 1255 0 R (blockcache.prefetch) 1919 0 R]
+/Names [(basic-distributed-hbase-install) 284 0 R (basic-spark) 1729 0 R (basic.prerequisites) 114 0 R (big.cluster.config) 299 0 R (big_memory) 316 0 R (block-cache-monitoring) 2594 0 R (block-index-format-in-version-1) 3395 0 R (block-index-in-version-2) 3404 0 R (block.cache) 1242 0 R (block.cache.design) 1253 0 R (block.cache.usage) 1255 0 R (blockcache.prefetch) 1919 0 R]
 >>
 endobj
 1114 0 obj
@@ -313764,17 +313764,17 @@ endobj
 endobj
 1189 0 obj
 << /Limits [(client.filter.utility) (code-io-hfile-bloom-enabled-code-global-kill-switch)]
-/Names [(client.filter.utility) 1209 0 R (client.filter.utility.fkof) 1210 0 R (client.writebuffer) 1151 0 R (client_dependencies) 273 0 R (cluster-information) 1624 0 R (cluster-replication) 2605 0 R (code-hbase-clean-code) 2514 0 R (code-hbase-ltt-code) 2516 0 R (code-hbase-pe-code) 2515 0 R (code-io-hfile-bloom-enabled-code-global-kill-switch) 2062 0 R]
+/Names [(client.filter.utility) 1209 0 R (client.filter.utility.fkof) 1210 0 R (client.writebuffer) 1151 0 R (client_dependencies) 273 0 R (cluster-information) 1624 0 R (cluster-replication) 2606 0 R (code-hbase-clean-code) 2515 0 R (code-hbase-ltt-code) 2517 0 R (code-hbase-pe-code) 2516 0 R (code-io-hfile-bloom-enabled-code-global-kill-switch) 2062 0 R]
 >>
 endobj
 1190 0 obj
 << /Limits [(acid) (confirm)]
-/Kids [169 0 R 3012 0 R 1495 0 R 3468 0 R 1113 0 R 2832 0 R 1745 0 R 2438 0 R 699 0 R 1163 0 R 1189 0 R 2978 0 R 2996 0 R 1469 0 R 2061 0 R]
+/Kids [169 0 R 3013 0 R 1495 0 R 3473 0 R 1113 0 R 2833 0 R 1745 0 R 2438 0 R 699 0 R 1163 0 R 1189 0 R 2979 0 R 2997 0 R 1469 0 R 2061 0 R]
 >>
 endobj
 1191 0 obj
 << /Limits [(managed.compactions) (regionserver.arch.processes.memstore)]
-/Kids [845 0 R 912 0 R 1389 0 R 2825 0 R 1709 0 R 2531 0 R 2741 0 R 2679 0 R 2809 0 R 595 0 R 2033 0 R 1993 0 R 1889 0 R 3263 0 R 1870 0 R 340 0 R]
+/Kids [845 0 R 912 0 R 1389 0 R 2826 0 R 1709 0 R 2532 0 R 2742 0 R 2680 0 R 2810 0 R 595 0 R 2033 0 R 1993 0 R 1889 0 R 3268 0 R 1870 0 R 340 0 R]
 >>
 endobj
 1192 0 obj
@@ -339224,7 +339224,7 @@ endobj
 endobj
 1338 0 obj
 << /Limits [(regionserver_sizing_rules_of_thumb) (resolution)]
-/Names [(regionserver_sizing_rules_of_thumb) 648 0 R (regionserver_splitting_implementation) 1283 0 R (regionservers) 288 0 R (reject) 3053 0 R (release-managers) 2969 0 R (releasing) 2843 0 R (replicating-visibility-tags-as-strings) 1078 0 R (replication-configuration-options) 2644 0 R (replication-internals) 2628 0 R (replication-metrics) 2643 0 R (replication-overview) 2607 0 R (repos) 2780 0 R (request) 3518 0 R (request-parts) 3519 0 R (request_queues) 2662 0 R (required_configuration) 296 0 R (resolution) 2412 0 R]
+/Names [(regionserver_sizing_rules_of_thumb) 648 0 R (regionserver_splitting_implementation) 1283 0 R (regionservers) 288 0 R (reject) 3054 0 R (release-managers) 2970 0 R (releasing) 2844 0 R (replicating-visibility-tags-as-strings) 1078 0 R (replication-configuration-options) 2645 0 R (replication-internals) 2629 0 R (replication-metrics) 2644 0 R (replication-overview) 2608 0 R (repos) 2781 0 R (request) 3523 0 R (request-parts) 3524 0 R (request_queues) 2663 0 R (required_configuration) 296 0 R (resolution) 2412 0 R]
 >>
 endobj
 1339 0 obj
@@ -347167,11 +347167,11 @@ endobj
 endobj
 1389 0 obj
 << /Limits [(master_metrics) (mlockall)]
-/Names [(master_metrics) 2573 0 R (maven.build.commands) 2817 0 R (maven.build.commands.compile) 2820 0 R (maven.build.commands.integration.tests.destructive) 2950 0 R (maven.build.commands.integration.tests.distributed) 2947 0 R (maven.build.commands.integration.tests.mini) 2942 0 R (maven.build.commands.integration.tests2) 2944 0 R (maven.build.commands.unitall) 2824 0 R (maven.build.hadoop) 2828 0 R (maven.release) 2850 0 R (maven.snapshot) 2873 0 R (memory-accounting) 1536 0 R (memstore-flush) 1394 0 R (merge-commits) 3073 0 R (metric-setup) 2562 0 R (metrics) 2590 0 R (missed-scan-results-due-to-mismatch-of-code-hbase-client-scanner-max-result-size-code-between-client-and-server) 2195 0 R (mlockall) 2506 0 R]
+/Names [(master_metrics) 2574 0 R (maven.build.commands) 2818 0 R (maven.build.commands.compile) 2821 0 R (maven.build.commands.integration.tests.destructive) 2951 0 R (maven.build.commands.integration.tests.distributed) 2948 0 R (maven.build.commands.integration.tests.mini) 2943 0 R (maven.build.commands.integration.tests2) 2945 0 R (maven.build.commands.unitall) 2825 0 R (maven.build.hadoop) 2829 0 R (maven.release) 2851 0 R (maven.snapshot) 2874 0 R (memory-accounting) 1536 0 R (memstore-flush) 1394 0 R (merge-commits) 3074 0 R (metric-setup) 2563 0 R (metrics) 2591 0 R (missed-scan-results-due-to-mismatch-of-code-hbase-client-scanner-max-result-size-code-between-client-and-server) 2195 0 R (mlockall) 2507 0 R]
 >>
 endobj
 1390 0 obj
-<< /Length 13979
+<< /Length 12391
 >>
 stream
 q
@@ -347616,27 +347616,34 @@ ET
 0.200 0.200 0.200 scn
 0.200 0.200 0.200 SCN
 
-1.450 Tw
-
 BT
 63.24000000000001 235.65600000000012 Td
 /F1.0 10.5 Tf
-[<6f757420746f206469736b20746f20726564756365206f766572> 20.01953125 <616c6c204d656d53746f726520757361676520696e206120526567696f6e5365727665722e2054686520666c757368206f72646572206973206261736564206f6e20746865>] TJ
+[<6f757420746f206469736b20746f20726564756365206f766572> 20.01953125 <616c6c204d656d53746f726520757361676520696e206120526567696f6e5365727665722e>] TJ
 ET
 
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+0.200 0.200 0.200 scn
+0.200 0.200 0.200 SCN
+
+BT
+63.24000000000001 207.87600000000012 Td
+/F1.0 10.5 Tf
+[<54686520666c757368206f72646572206973206261736564206f6e207468652064657363656e64696e67206f72646572206f66206120726567696f6ed5> 49.8046875 <73204d656d53746f72652075736167652e>] TJ
+ET
 
-0.000 Tw
 0.000 0.000 0.000 SCN
 0.000 0.000 0.000 scn
 0.200 0.200 0.200 scn
 0.200 0.200 0.200 SCN
 
-0.051 Tw
+1.584 Tw
 
 BT
-63.24000000000001 219.87600000000012 Td
+63.24000000000001 180.09600000000012 Td
 /F1.0 10.5 Tf
-[<64657363656e64696e67206f72646572206f66206120726567696f6ed5> 49.8046875 <73204d656d53746f72652075736167652e20526567696f6e732077696c6c2068617665207468656972204d656d53746f72657320666c757368656420756e74696c20746865>] TJ
+[<526567696f6e732077696c6c2068617665207468656972204d656d53746f72657320666c757368656420756e74696c20746865206f766572> 20.01953125 <616c6c204d656d53746f72652075736167652064726f707320746f206f7220736c696768746c79>] TJ
 ET
 
 
@@ -347647,9 +347654,9 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 204.09600000000012 Td
+63.24000000000001 164.31600000000012 Td
 /F1.0 10.5 Tf
-[<6f766572> 20.01953125 <616c6c204d656d53746f72652075736167652064726f707320746f206f7220736c696768746c792062656c6f7720>] TJ
+<62656c6f7720> Tj
 ET
 
 0.000 0.000 0.000 SCN
@@ -347658,7 +347665,7 @@ ET
 0.694 0.129 0.275 SCN
 
 BT
-316.14279492187507 204.09600000000012 Td
+96.3675 164.31600000000012 Td
 /F3.0 10.5 Tf
 <68626173652e726567696f6e7365727665722e676c6f62616c2e6d656d73746f72652e6c6f7765724c696d6974> Tj
 ET
@@ -347669,7 +347676,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-552.3927949218751 204.09600000000012 Td
+332.61750000000006 164.31600000000012 Td
 /F1.0 10.5 Tf
 <2e> Tj
 ET
@@ -347680,7 +347687,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-51.49275000000001 176.31600000000012 Td
+51.49275000000001 136.53600000000012 Td
 /F1.0 10.5 Tf
 <332e> Tj
 ET
@@ -347690,12 +347697,12 @@ ET
 0.200 0.200 0.200 scn
 0.200 0.200 0.200 SCN
 
-10.763 Tw
+0.466 Tw
 
 BT
-63.24000000000001 176.31600000000012 Td
+63.24000000000001 136.53600000000012 Td
 /F1.0 10.5 Tf
-[<5768656e20746865206e756d626572206f662057> 60.05859375 <414c2070657220726567696f6e207365727665722072656163686573207468652076616c75652073706563696669656420696e>] TJ
+[<5768656e20746865206e756d626572206f662057> 60.05859375 <414c206c6f6720656e747269657320696e206120676976656e20726567696f6e20736572766572> -29.78515625 <d5> 49.8046875 <732057> 60.05859375 <414c2072656163686573207468652076616c75652073706563696669656420696e>] TJ
 ET
 
 
@@ -347708,7 +347715,7 @@ ET
 0.712 Tw
 
 BT
-63.24000000000001 160.53600000000012 Td
+63.24000000000001 120.75600000000011 Td
 /F3.0 10.5 Tf
 <68626173652e726567696f6e7365727665722e6d61782e6c6f6773> Tj
 ET
@@ -347723,7 +347730,7 @@ ET
 0.712 Tw
 
 BT
-204.99 160.53600000000012 Td
+204.99 120.75600000000011 Td
 /F1.0 10.5 Tf
 <2c204d656d53746f7265732066726f6d20766172696f757320726567696f6e732077696c6c20626520666c7573686564206f757420746f206469736b20746f20726564756365> Tj
 ET
@@ -347735,34 +347742,108 @@ ET
 0.200 0.200 0.200 scn
 0.200 0.200 0.200 SCN
 
-1.039 Tw
+BT
+63.24000000000001 104.97600000000011 Td
+/F1.0 10.5 Tf
+[<746865206e756d626572206f66206c6f677320696e207468652057> 60.05859375 <414c2e>] TJ
+ET
+
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+0.200 0.200 0.200 scn
+0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 144.7560000000001 Td
+63.24000000000001 77.19600000000011 Td
 /F1.0 10.5 Tf
-[<57> 60.05859375 <414c20636f756e742e2054686520666c757368206f72646572206973206261736564206f6e2074696d652e20526567696f6e73207769746820746865206f6c64657374204d656d53746f7265732061726520666c7573686564206669727374>] TJ
+<54686520666c757368206f72646572206973206261736564206f6e2074696d652e> Tj
 ET
 
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+q
+0.000 0.000 0.000 scn
+0.000 0.000 0.000 SCN
+1 w
+0 J
+0 j
+[ ] 0 d
+q
+0.5 w
+0.867 0.867 0.867 SCN
+48.240 30.120 m
+563.760 30.120 l
+S
+Q
+0.200 0.200 0.200 scn
+0.200 0.200 0.200 SCN
+
+BT
+548.6669999999999 14.508000000000001 Td
+/F1.0 9 Tf
+<323632> Tj
+ET
 
-0.000 Tw
 0.000 0.000 0.000 SCN
 0.000 0.000 0.000 scn
+Q
+Q
+
+endstream
+endobj
+1391 0 obj
+<< /Type /Page
+/Parent 3 0 R
+/MediaBox [0 0 612.0 792.0]
+/Contents 1390 0 R
+/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/Font << /F1.0 11 0 R
+/F3.0 31 0 R
+/F2.0 10 0 R
+>>
+>>
+>>
+endobj
+1392 0 obj
+[1391 0 R /XYZ 0 605.4 null]
+endobj
+1393 0 obj
+[1391 0 R /XYZ 0 521.7600000000001 null]
+endobj
+1394 0 obj
+[1391 0 R /XYZ 0 398.58000000000015 null]
+endobj
+1395 0 obj
+<< /Length 16466
+>>
+stream
+q
+/DeviceRGB cs
+1.000 1.000 1.000 scn
+0.000 0.000 612.000 792.000 re
+f
+0.000 0.000 0.000 scn
 0.200 0.200 0.200 scn
+/DeviceRGB CS
 0.200 0.200 0.200 SCN
 
+7.875 Tw
+
 BT
-63.24000000000001 128.9760000000001 Td
+63.24000000000001 744.786 Td
 /F1.0 10.5 Tf
-[<756e74696c2057> 60.05859375 <414c20636f756e742064726f70732062656c6f7720>] TJ
+[<526567696f6e73207769746820746865206f6c64657374204d656d53746f7265732061726520666c757368656420666972737420756e74696c2057> 60.05859375 <414c20636f756e742064726f70732062656c6f77>] TJ
 ET
 
+
+0.000 Tw
 0.000 0.000 0.000 SCN
 0.000 0.000 0.000 scn
 0.694 0.129 0.275 scn
 0.694 0.129 0.275 SCN
 
 BT
-212.234384765625 128.9760000000001 Td
+63.24000000000001 729.006 Td
 /F3.0 10.5 Tf
 <68626173652e726567696f6e7365727665722e6d61782e6c6f6773> Tj
 ET
@@ -347773,7 +347854,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-353.984384765625 128.9760000000001 Td
+204.99 729.006 Td
 /F1.0 10.5 Tf
 <2e> Tj
 ET
@@ -347784,7 +347865,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 95.5760000000001 Td
+48.24000000000001 695.6060000000001 Td
 /F2.0 13 Tf
 <36382e372e332e205363616e73> Tj
 ET
@@ -347795,7 +347876,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 68.91600000000011 Td
+53.84475000000001 668.9460000000001 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -347808,7 +347889,7 @@ ET
 0.816 Tw
 
 BT
-63.24000000000001 68.91600000000011 Td
+63.24000000000001 668.9460000000001 Td
 /F1.0 10.5 Tf
 [<5768656e206120636c69656e74206973737565732061207363616e20616761696e73742061207461626c652c2048426173652067656e6572> 20.01953125 <6174657320>] TJ
 ET
@@ -347823,7 +347904,7 @@ ET
 0.816 Tw
 
 BT
-373.42834531249997 68.91600000000011 Td
+373.42834531249997 668.9460000000001 Td
 /F3.0 10.5 Tf
 <526567696f6e5363616e6e6572> Tj
 ET
@@ -347838,7 +347919,7 @@ ET
 0.816 Tw
 
 BT
-441.67834531249997 68.91600000000011 Td
+441.67834531249997 668.9460000000001 Td
 /F1.0 10.5 Tf
 <206f626a656374732c206f6e652070657220726567696f6e2c> Tj
 ET
@@ -347851,84 +347932,18 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 53.13600000000011 Td
+63.24000000000001 653.1660000000002 Td
 /F1.0 10.5 Tf
 <746f20736572766520746865207363616e20726571756573742e> Tj
 ET
 
 0.000 0.000 0.000 SCN
 0.000 0.000 0.000 scn
-q
-0.000 0.000 0.000 scn
-0.000 0.000 0.000 SCN
-1 w
-0 J
-0 j
-[ ] 0 d
-q
-0.5 w
-0.867 0.867 0.867 SCN
-48.240 30.120 m
-563.760 30.120 l
-S
-Q
-0.200 0.200 0.200 scn
-0.200 0.200 0.200 SCN
-
-BT
-548.6669999999999 14.508000000000001 Td
-/F1.0 9 Tf
-<323632> Tj
-ET
-
-0.000 0.000 0.000 SCN
-0.000 0.000 0.000 scn
-Q
-Q
-
-endstream
-endobj
-1391 0 obj
-<< /Type /Page
-/Parent 3 0 R
-/MediaBox [0 0 612.0 792.0]
-/Contents 1390 0 R
-/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
-/Font << /F1.0 11 0 R
-/F3.0 31 0 R
-/F2.0 10 0 R
->>
->>
->>
-endobj
-1392 0 obj
-[1391 0 R /XYZ 0 605.4 null]
-endobj
-1393 0 obj
-[1391 0 R /XYZ 0 521.7600000000001 null]
-endobj
-1394 0 obj
-[1391 0 R /XYZ 0 398.58000000000015 null]
-endobj
-1395 0 obj
-[1391 0 R /XYZ 0 113.16000000000011 null]
-endobj
-1396 0 obj
-<< /Length 16314
->>
-stream
-q
-/DeviceRGB cs
-1.000 1.000 1.000 scn
-0.000 0.000 612.000 792.000 re
-f
-0.000 0.000 0.000 scn
 0.200 0.200 0.200 scn
-/DeviceRGB CS
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 744.036 Td
+53.84475000000001 625.3860000000002 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -347939,7 +347954,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 744.036 Td
+63.24000000000001 625.3860000000002 Td
 /F1.0 10.5 Tf
 <54686520> Tj
 ET
@@ -347950,7 +347965,7 @@ ET
 0.694 0.129 0.275 SCN
 
 BT
-84.66000000000001 744.036 Td
+84.66000000000001 625.3860000000002 Td
 /F3.0 10.5 Tf
 <526567696f6e5363616e6e6572> Tj
 ET
@@ -347961,7 +347976,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-152.91000000000003 744.036 Td
+152.91000000000003 625.3860000000002 Td
 /F1.0 10.5 Tf
 <206f626a65637420636f6e7461696e732061206c697374206f6620> Tj
 ET
@@ -347972,7 +347987,7 @@ ET
 0.694 0.129 0.275 SCN
 
 BT
-272.6625 744.036 Td
+272.6625 625.3860000000002 Td
 /F3.0 10.5 Tf
 <53746f72655363616e6e6572> Tj
 ET
@@ -347983,7 +347998,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-335.6625 744.036 Td
+335.6625 625.3860000000002 Td
 /F1.0 10.5 Tf
 [<206f626a656374732c206f6e652070657220636f6c756d6e2066616d696c79> 89.84375 <2e>] TJ
 ET
@@ -347994,7 +348009,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 716.256 Td
+53.84475000000001 597.6060000000002 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -348007,7 +348022,7 @@ ET
 1.106 Tw
 
 BT
-63.24000000000001 716.256 Td
+63.24000000000001 597.6060000000002 Td
 /F1.0 10.5 Tf
 <4561636820> Tj
 ET
@@ -348022,7 +348037,7 @@ ET
 1.106 Tw
 
 BT
-91.3315 716.256 Td
+91.3315 597.6060000000002 Td
 /F3.0 10.5 Tf
 <53746f72655363616e6e6572> Tj
 ET
@@ -348037,7 +348052,7 @@ ET
 1.106 Tw
 
 BT
-154.3315 716.256 Td
+154.3315 597.6060000000002 Td
 /F1.0 10.5 Tf
 <206f626a656374206675727468657220636f6e7461696e732061206c697374206f6620> Tj
 ET
@@ -348052,7 +348067,7 @@ ET
 1.106 Tw
 
 BT
-320.942 716.256 Td
+320.942 597.6060000000002 Td
 /F3.0 10.5 Tf
 <53746f726546696c655363616e6e6572> Tj
 ET
@@ -348067,7 +348082,7 @@ ET
 1.106 Tw
 
 BT
-404.942 716.256 Td
+404.942 597.6060000000002 Td
 /F1.0 10.5 Tf
 <206f626a656374732c20636f72726573706f6e64696e6720746f2065616368> Tj
 ET
@@ -348082,7 +348097,7 @@ ET
 0.298 Tw
 
 BT
-63.24000000000001 700.476 Td
+63.24000000000001 581.8260000000002 Td
 /F1.0 10.5 Tf
 [<53746f726546696c6520616e64204846696c65206f662074686520636f72726573706f6e64696e6720636f6c756d6e2066616d696c79> 89.84375 <2c20616e642061206c697374206f6620>] TJ
 ET
@@ -348097,7 +348112,7 @@ ET
 0.298 Tw
 
 BT
-410.257528125 700.476 Td
+410.257528125 581.8260000000002 Td
 /F3.0 10.5 Tf
 <4b657956616c75655363616e6e6572> Tj
 ET
@@ -348112,7 +348127,7 @@ ET
 0.298 Tw
 
 BT
-489.007528125 700.476 Td
+489.007528125 581.8260000000002 Td
 /F1.0 10.5 Tf
 <206f626a6563747320666f7220746865> Tj
 ET
@@ -348125,7 +348140,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 684.696 Td
+63.24000000000001 566.0460000000003 Td
 /F1.0 10.5 Tf
 <4d656d53746f72652e> Tj
 ET
@@ -348136,7 +348151,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 656.9159999999999 Td
+53.84475000000001 538.2660000000002 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -348149,7 +348164,7 @@ ET
 0.972 Tw
 
 BT
-63.24000000000001 656.9159999999999 Td
+63.24000000000001 538.2660000000003 Td
 /F1.0 10.5 Tf
 <5468652074776f206c6973747320617265206d657267656420696e746f206f6e652c20776869636820697320736f7274656420696e20617363656e64696e67206f72646572207769746820746865207363616e206f626a65637420666f7220746865> Tj
 ET
@@ -348162,7 +348177,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 641.136 Td
+63.24000000000001 522.4860000000002 Td
 /F1.0 10.5 Tf
 <4d656d53746f72652061742074686520656e64206f6620746865206c6973742e> Tj
 ET
@@ -348173,7 +348188,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 613.356 Td
+53.84475000000001 494.7060000000003 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -348186,7 +348201,7 @@ ET
 15.825 Tw
 
 BT
-63.24000000000001 613.356 Td
+63.24000000000001 494.7060000000003 Td
 /F1.0 10.5 Tf
 <5768656e206120> Tj
 ET
@@ -348201,7 +348216,7 @@ ET
 15.825 Tw
 
 BT
-136.2603 613.356 Td
+136.2603 494.7060000000003 Td
 /F3.0 10.5 Tf
 <53746f726546696c655363616e6e6572> Tj
 ET
@@ -348216,7 +348231,7 @@ ET
 15.825 Tw
 
 BT
-220.2603 613.356 Td
+220.2603 494.7060000000003 Td
 /F1.0 10.5 Tf
 <206f626a65637420697320636f6e73747275637465642c206974206973206173736f63696174656420776974682061> Tj
 ET
@@ -348231,7 +348246,7 @@ ET
 1.516 Tw
 
 BT
-63.24000000000001 597.576 Td
+63.24000000000001 478.9260000000003 Td
 /F3.0 10.5 Tf
 <4d756c746956657273696f6e436f6e63757272656e6379436f6e74726f6c> Tj
 ET
@@ -348246,7 +348261,7 @@ ET
 1.516 Tw
 
 BT
-220.74 597.576 Td
+220.74 478.9260000000003 Td
 /F1.0 10.5 Tf
 <207265616420706f696e742c207768696368206973207468652063757272656e7420> Tj
 ET
@@ -348261,7 +348276,7 @@ ET
 1.516 Tw
 
 BT
-394.9551759588068 597.576 Td
+394.9551759588068 478.9260000000003 Td
 /F3.0 10.5 Tf
 <6d656d73746f72655453> Tj
 ET
@@ -348276,7 +348291,7 @@ ET
 1.516 Tw
 
 BT
-447.4551759588068 597.576 Td
+447.4551759588068 478.9260000000003 Td
 /F1.0 10.5 Tf
 [<2c2066696c746572696e67206f757420616e> 20.01953125 <79206e6577>] TJ
 ET
@@ -348289,7 +348304,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 581.796 Td
+63.24000000000001 463.1460000000003 Td
 /F1.0 10.5 Tf
 <75706461746573206265796f6e6420746865207265616420706f696e742e> Tj
 ET
@@ -348300,7 +348315,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 548.3960000000001 Td
+48.24000000000001 429.74600000000027 Td
 /F2.0 13 Tf
 <36382e372e342e2053746f726546696c6520284846696c6529> Tj
 ET
@@ -348311,7 +348326,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 521.7360000000001 Td
+48.24000000000001 403.08600000000024 Td
 /F1.0 10.5 Tf
 <53746f726546696c65732061726520776865726520796f75722064617461206c697665732e> Tj
 ET
@@ -348322,7 +348337,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 491.2560000000002 Td
+48.24000000000001 372.6060000000002 Td
 /F2.0 10.5 Tf
 [<4846696c652046> 40.0390625 <6f726d6174>] TJ
 ET
@@ -348335,7 +348350,7 @@ ET
 2.536 Tw
 
 BT
-48.24000000000001 465.57600000000014 Td
+48.24000000000001 346.92600000000016 Td
 /F1.0 10.5 Tf
 <54686520> Tj
 ET
@@ -348350,7 +348365,7 @@ ET
 2.536 Tw
 
 BT
-72.19589372702207 465.57600000000014 Td
+72.19589372702207 346.92600000000016 Td
 /F4.0 10.5 Tf
 <4846696c65> Tj
 ET
@@ -348365,7 +348380,7 @@ ET
 2.536 Tw
 
 BT
-98.25689372702206 465.57600000000014 Td
+98.25689372702206 346.92600000000016 Td
 /F1.0 10.5 Tf
 [<2066696c6520666f726d6174206973206261736564206f6e20746865205353> 20.01953125 <54> 29.78515625 <61626c652066696c652064657363726962656420696e2074686520>] TJ
 ET
@@ -348380,7 +348395,7 @@ ET
 2.536 Tw
 
 BT
-407.2651692325368 465.57600000000014 Td
+407.2651692325368 346.92600000000016 Td
 /F1.0 10.5 Tf
 [<42696754> 29.78515625 <61626c65205b32303036>] TJ
 ET
@@ -348395,7 +348410,7 @@ ET
 2.536 Tw
 
 BT
-482.94631881893383 465.57600000000014 Td
+482.94631881893383 346.92600000000016 Td
 /F1.0 10.5 Tf
 <5d20706170657220616e64206f6e> Tj
 ET
@@ -348410,7 +348425,7 @@ ET
 2.595 Tw
 
 BT
-48.24000000000001 449.79600000000016 Td
+48.24000000000001 331.1460000000002 Td
 /F1.0 10.5 Tf
 [<4861646f6f70d5> 49.8046875 <7320>] TJ
 ET
@@ -348425,7 +348440,7 @@ ET
 2.595 Tw
 
 BT
-99.59902608816965 449.79600000000016 Td
+99.59902608816965 331.1460000000002 Td
 /F1.0 10.5 Tf
 <5446696c65> Tj
 ET
@@ -348440,7 +348455,7 @@ ET
 2.595 Tw
 
 BT
-124.43152608816965 449.79600000000016 Td
+124.43152608816965 331.1460000000002 Td
 /F1.0 10.5 Tf
 [<202854686520756e6974207465737420737569746520616e642074686520636f6d7072657373696f6e206861726e65737320776572652074616b> 20.01953125 <656e206469726563746c792066726f6d205446696c65292e>] TJ
 ET
@@ -348455,7 +348470,7 @@ ET
 2.339 Tw
 
 BT
-48.24000000000001 434.01600000000013 Td
+48.24000000000001 315.36600000000016 Td
 /F1.0 10.5 Tf
 [<5363687562657274205a68616e67d5> 49.8046875 <7320626c6f6720706f7374206f6e20>] TJ
 ET
@@ -348470,7 +348485,7 @@ ET
 2.339 Tw
 
 BT
-211.5862935267857 434.01600000000013 Td
+211.5862935267857 315.36600000000016 Td
 /F1.0 10.5 Tf
 [<4846696c653a204120426c6f636b2d496e64657865642046696c652046> 40.0390625 <6f726d617420746f2053746f726520536f72746564204b> 20.01953125 <65792d56> 60.05859375 <616c7565205061697273>] TJ
 ET
@@ -348485,7 +348500,7 @@ ET
 2.339 Tw
 
 BT
-563.76 434.01600000000013 Td
+563.76 315.36600000000016 Td
 ET
 
 
@@ -348498,7 +348513,7 @@ ET
 3.354 Tw
 
 BT
-48.24000000000001 418.2360000000001 Td
+48.24000000000001 299.5860000000001 Td
 /F1.0 10.5 Tf
 [<6d616b> 20.01953125 <657320666f7220612074686f726f75676820696e74726f64756374696f6e20746f204842617365d5> 49.8046875 <73204846696c652e204d617474656f20426572746f7a7a692068617320616c736f2070757420757020612068656c7066756c>] TJ
 ET
@@ -348511,7 +348526,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 402.45600000000013 Td
+48.24000000000001 283.80600000000015 Td
 /F1.0 10.5 Tf
 <6465736372697074696f6e2c20> Tj
 ET
@@ -348522,7 +348537,7 @@ ET
 0.259 0.545 0.792 SCN
 
 BT
-110.14800000000001 402.45600000000013 Td
+110.14800000000001 283.80600000000015 Td
 /F1.0 10.5 Tf
 <484261736520492f4f3a204846696c65> Tj
 ET
@@ -348533,7 +348548,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-191.40750000000003 402.45600000000013 Td
+191.40750000000003 283.80600000000015 Td
 /F1.0 10.5 Tf
 <2e> Tj
 ET
@@ -348546,7 +348561,7 @@ ET
 0.217 Tw
 
 BT
-48.24000000000001 374.6760000000001 Td
+48.24000000000001 256.0260000000001 Td
 /F1.0 10.5 Tf
 [<46> 40.0390625 <6f72206d6f726520696e666f726d6174696f6e2c207365652074686520>] TJ
 ET
@@ -348561,7 +348576,7 @@ ET
 0.217 Tw
 
 BT
-201.48178051757816 374.6760000000001 Td
+201.48178051757816 256.0260000000001 Td
 /F1.0 10.5 Tf
 <4846696c6520736f7572636520636f6465> Tj
 ET
@@ -348576,7 +348591,7 @@ ET
 0.217 Tw
 
 BT
-290.5364567871094 374.6760000000001 Td
+290.5364567871094 256.0260000000001 Td
 /F1.0 10.5 Tf
 <2e20416c736f2073656520> Tj
 ET
@@ -348591,7 +348606,7 @@ ET
 0.217 Tw
 
 BT
-339.3939711914063 374.6760000000001 Td
+339.3939711914063 256.0260000000001 Td
 /F1.0 10.5 Tf
 <48426173652066696c6520666f726d6174207769746820696e6c696e6520626c6f636b73202876657273696f6e> Tj
 ET
@@ -348604,7 +348619,7 @@ ET
 0.259 0.545 0.792 SCN
 
 BT
-48.24000000000001 358.8960000000001 Td
+48.24000000000001 240.24600000000012 Td
 /F1.0 10.5 Tf
 <3229> Tj
 ET
@@ -348615,7 +348630,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-57.74250000000001 358.8960000000001 Td
+57.74250000000001 240.24600000000012 Td
 /F1.0 10.5 Tf
 <20666f7220696e666f726d6174696f6e2061626f757420746865204846696c6520763220666f726d617420746861742077617320696e636c7564656420696e20302e39322e> Tj
 ET
@@ -348626,7 +348641,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 328.4160000000001 Td
+48.24000000000001 209.7660000000001 Td
 /F2.0 10.5 Tf
 [<4846696c652054> 29.78515625 <6f6f6c>] TJ
 ET
@@ -348639,7 +348654,7 @@ ET
 0.124 Tw
 
 BT
-48.24000000000001 302.7360000000001 Td
+48.24000000000001 184.0860000000001 Td
 /F1.0 10.5 Tf
 [<54> 29.78515625 <6f20766965772061207465787475616c697a65642076657273696f6e206f66204846696c6520636f6e74656e742c20796f752063616e207573652074686520>] TJ
 ET
@@ -348654,7 +348669,7 @@ ET
 0.124 Tw
 
 BT
-364.26000000000005 302.7360000000001 Td
+364.26000000000005 184.0860000000001 Td
 /F3.0 10.5 Tf
 <6f72672e6170616368652e6861646f6f702e68626173652e696f2e6866696c652e4846696c65> Tj
 ET
@@ -348667,7 +348682,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 286.95600000000013 Td
+48.24000000000001 168.3060000000001 Td
 /F1.0 10.5 Tf
 <746f6f6c2e20547970652074686520666f6c6c6f77696e6720746f207365652075736167653a> Tj
 ET
@@ -348676,28 +348691,28 @@ ET
 0.000 0.000 0.000 scn
 q
 0.961 0.961 0.961 scn
-52.240 271.140 m
-559.760 271.140 l
-561.969 271.140 563.760 269.349 563.760 267.140 c
-563.760 238.400 l
-563.760 236.191 561.969 234.400 559.760 234.400 c
-52.240 234.400 l
-50.031 234.400 48.240 236.191 48.240 238.400 c
-48.240 267.140 l
-48.240 269.349 50.031 271.140 52.240 271.140 c
+52.240 152.490 m
+559.760 152.490 l
+561.969 152.490 563.760 150.699 563.760 148.490 c
+563.760 119.750 l
+563.760 117.541 561.969 115.750 559.760 115.750 c
+52.240 115.750 l
+50.031 115.750 48.240 117.541 48.240 119.750 c
+48.240 148.490 l
+48.240 150.699 50.031 152.490 52.240 152.490 c
 h
 f
 0.800 0.800 0.800 SCN
 0.75 w
-52.240 271.140 m
-559.760 271.140 l
-561.969 271.140 563.760 269.349 563.760 267.140 c
-563.760 238.400 l
-563.760 236.191 561.969 234.400 559.760 234.400 c
-52.240 234.400 l
-50.031 234.400 48.240 236.191 48.240 238.400 c
-48.240 267.140 l
-48.240 269.349 50.031 271.140 52.240 271.140 c
+52.240 152.490 m
+559.760 152.490 l
+561.969 152.490 563.760 150.699 563.760 148.490 c
+563.760 119.750 l
+563.760 117.541 561.969 115.750 559.760 115.750 c
+52.240 115.750 l
+50.031 115.750 48.240 117.541 48.240 119.750 c
+48.240 148.490 l
+48.240 150.699 50.031 152.490 52.240 152.490 c
 h
 S
 Q
@@ -348705,7 +348720,7 @@ Q
 0.200 0.200 0.200 SCN
 
 BT
-59.24000000000001 248.31500000000008 Td
+59.24000000000001 129.66500000000008 Td
 /F3.0 11 Tf
 <2420247b48424153455f484f4d457d2f62696e2f6862617365206f72672e6170616368652e6861646f6f702e68626173652e696f2e6866696c652e4846696c65> Tj
 ET
@@ -348718,7 +348733,7 @@ ET
 37.746 Tw
 
 BT
-48.24000000000001 210.4360000000001 Td
+48.24000000000001 91.78600000000009 Td
 /F1.0 10.5 Tf
 [<46> 40.0390625 <6f72206578616d706c652c20746f20766965772074686520636f6e74656e74206f66207468652066696c65>] TJ
 ET
@@ -348731,7 +348746,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 194.6560000000001 Td
+48.24000000000001 76.00600000000009 Td
 /F4.0 10.5 Tf
 [<686466733a2f2f31302e38312e34372e34313a383032302f68626173652f544553> 20.01953125 <542f313431383432383034322f44534d502f34373539353038363138323836383435343735>] TJ
 ET
@@ -348742,7 +348757,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-427.35279492187505 194.6560000000001 Td
+427.35279492187505 76.00600000000009 Td
 /F1.0 10.5 Tf
 <2c20747970652074686520666f6c6c6f77696e673a> Tj
 ET
@@ -348750,103 +348765,6 @@ ET
 0.000 0.000 0.000 SCN
 0.000 0.000 0.000 scn
 q
-0.961 0.961 0.961 scn
-52.240 178.840 m
-559.760 178.840 l
-561.969 178.840 563.760 177.049 563.760 174.840 c
-563.760 131.360 l
-563.760 129.151 561.969 127.360 559.760 127.360 c
-52.240 127.360 l
-50.031 127.360 48.240 129.151 48.240 131.360 c
-48.240 174.840 l
-48.240 177.049 50.031 178.840 52.240 178.840 c
-h
-f
-0.800 0.800 0.800 SCN
-0.75 w
-52.240 178.840 m
-559.760 178.840 l
-561.969 178.840 563.760 177.049 563.760 174.840 c
-563.760 131.360 l
-563.760 129.151 561.969 127.360 559.760 127.360 c
-52.240 127.360 l
-50.031 127.360 48.240 129.151 48.240 131.360 c
-48.240 174.840 l
-48.240 177.049 50.031 178.840 52.240 178.840 c
-h
-S
-Q
-0.200 0.200 0.200 scn
-0.200 0.200 0.200 SCN
-
-BT
-59.24000000000001 156.0150000000001 Td
-/F3.0 11 Tf
-<ca2420247b48424153455f484f4d457d2f62696e2f6862617365206f72672e6170616368652e6861646f6f702e68626173652e696f2e6866696c652e4846696c65202d76202d66> Tj
-ET
-
-0.000 0.000 0.000 SCN
-0.000 0.000 0.000 scn
-0.200 0.200 0.200 scn
-0.200 0.200 0.200 SCN
-
-BT
-59.24000000000001 141.2750000000001 Td
-/F3.0 11 Tf
-<686466733a2f2f31302e38312e34372e34313a383032302f68626173652f544553542f313431383432383034322f44534d502f34373539353038363138323836383435343735> Tj
-ET
-
-0.000 0.000 0.000 SCN
-0.000 0.000 0.000 scn
-0.200 0.200 0.200 scn
-0.200 0.200 0.200 SCN
-
-0.554 Tw
-
-BT
-48.24000000000001 103.39600000000007 Td
-/F1.0 10.5 Tf
-<496620796f75206c65617665206f666620746865206f7074696f6e202d7620746f20736565206a75737420612073756d6d617279206f6e20746865204846696c652e2053656520757361676520666f72206f74686572207468696e677320746f20646f2077697468> Tj
-ET
-
-
-0.000 Tw
-0.000 0.000 0.000 SCN
-0.000 0.000 0.000 scn
-0.200 0.200 0.200 scn
-0.200 0.200 0.200 SCN
-
-BT
-48.24000000000001 87.61600000000007 Td
-/F1.0 10.5 Tf
-<74686520> Tj
-ET
-
-0.000 0.000 0.000 SCN
-0.000 0.000 0.000 scn
-0.694 0.129 0.275 scn
-0.694 0.129 0.275 SCN
-
-BT
-66.93 87.61600000000007 Td
-/F3.0 10.5 Tf
-<4846696c65> Tj
-ET
-
-0.000 0.000 0.000 SCN
-0.000 0.000 0.000 scn
-0.200 0.200 0.200 scn
-0.200 0.200 0.200 SCN
-
-BT
-93.18 87.61600000000007 Td
-/F1.0 10.5 Tf
-<20746f6f6c2e> Tj
-ET
-
-0.000 0.000 0.000 SCN
-0.000 0.000 0.000 scn
-q
 0.000 0.000 0.000 scn
 0.000 0.000 0.000 SCN
 1 w
@@ -348876,11 +348794,11 @@ Q
 
 endstream
 endobj
-1397 0 obj
+1396 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 1396 0 R
+/Contents 1395 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -348891,11 +348809,14 @@ endobj
 /Annots [1400 0 R 1401 0 R 1402 0 R 1403 0 R 1404 0 R 1405 0 R 1406 0 R]
 >>
 endobj
+1397 0 obj
+[1396 0 R /XYZ 0 713.19 null]
+endobj
 1398 0 obj
-[1397 0 R /XYZ 0 565.98 null]
+[1396 0 R /XYZ 0 447.33000000000027 null]
 endobj
 1399 0 obj
-[1397 0 R /XYZ 0 505.9200000000002 null]
+[1396 0 R /XYZ 0 387.2700000000002 null]
 endobj
 1400 0 obj
 << /Border [0 0 0]
@@ -348904,7 +348825,7 @@ endobj
 /URI (http://research.google.com/archive/bigtable.html)
 >>
 /Subtype /Link
-/Rect [407.2651692325368 462.51000000000016 482.94631881893383 476.79000000000013]
+/Rect [407.2651692325368 343.8600000000002 482.94631881893383 358.14000000000016]
 /Type /Annot
 >>
 endobj
@@ -348915,7 +348836,7 @@ endobj
 /URI (http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/io/file/tfile/TFile.html)
 >>
 /Subtype /Link
-/Rect [99.59902608816965 446.7300000000002 124.43152608816965 461.01000000000016]
+/Rect [99.59902608816965 328.0800000000002 124.43152608816965 342.3600000000002]
 /Type /Annot
 >>
 endobj
@@ -348926,7 +348847,7 @@ endobj
 /URI (http://cloudepr.blogspot.com/2009/09/hfile-block-indexed-file-format-to.html)
 >>
 /Subtype /Link
-/Rect [211.5862935267857 430.95000000000016 563.76 445.23000000000013]
+/Rect [211.5862935267857 312.3000000000002 563.76 326.58000000000015]
 /Type /Annot
 >>
 endobj
@@ -348937,7 +348858,7 @@ endobj
 /URI (http://th30z.blogspot.com/2011/02/hbase-io-hfile.html?spref=tw)
 >>
 /Subtype /Link
-/Rect [110.14800000000001 399.39000000000016 191.40750000000003 413.67000000000013]
+/Rect [110.14800000000001 280.7400000000001 191.40750000000003 295.02000000000015]
 /Type /Annot
 >>
 endobj
@@ -348948,7 +348869,7 @@ endobj
 /URI (http://hbase.apache.org/xref/org/apache/hadoop/hbase/io/hfile/HFile.html)
 >>
 /Subtype /Link
-/Rect [201.48178051757816 371.6100000000001 290.5364567871094 385.8900000000001]
+/Rect [201.48178051757816 252.96000000000012 290.5364567871094 267.2400000000001]
 /Type /Annot
 >>
 endobj
@@ -348956,7 +348877,7 @@ endobj
 << /Border [0 0 0]
 /Dest (#hfilev2)
 /Subtype /Link
-/Rect [339.3939711914063 371.6100000000001 563.7600000000001 385.8900000000001]
+/Rect [339.3939711914063 252.96000000000012 563.7600000000001 267.2400000000001]
 /Type /Annot
 >>
 endobj
@@ -348964,20 +348885,20 @@ endobj
 << /Border [0 0 0]
 /Dest (#hfilev2)
 /Subtype /Link
-/Rect [48.24000000000001 355.8300000000001 57.74250000000001 370.11000000000007]
+/Rect [48.24000000000001 237.18000000000012 57.74250000000001 251.46000000000012]
 /Type /Annot
 >>
 endobj
 1407 0 obj
-[1397 0 R /XYZ 0 343.0800000000001 null]
+[1396 0 R /XYZ 0 224.43000000000012 null]
 endobj
 1408 0 obj
 << /Limits [(how-it-works) (important_configurations)]
-/Names [(how-it-works) 1016 0 R (how-it-works-2) 1081 0 R (hregion.scans) 1395 0 R (hvilev3.infoblock) 3424 0 R (hypotheses) 2402 0 R (ides) 2787 0 R (images-in-the-hbase-reference-guide) 3226 0 R (implementation-details) 1013 0 R (implementation-details-2) 1025 0 R (implementing-your-own-visibility-label-algorithm) 1075 0 R (implicit-version-example) 596 0 R (import) 2480 0 R (important_configurations) 295 0 R]
+/Names [(how-it-works) 1016 0 R (how-it-works-2) 1081 0 R (hregion.scans) 1397 0 R (hvilev3.infoblock) 3429 0 R (hypotheses) 2402 0 R (ides) 2788 0 R (images-in-the-hbase-reference-guide) 3231 0 R (implementation-details) 1013 0 R (implementation-details-2) 1025 0 R (implementing-your-own-visibility-label-algorithm) 1075 0 R (implicit-version-example) 596 0 R (import) 2481 0 R (important_configurations) 295 0 R]
 >>
 endobj
 1409 0 obj
-<< /Length 10517
+<< /Length 10510
 >>
 stream
 q
@@ -348986,12 +348907,110 @@ q
 0.000 0.000 612.000 792.000 re
 f
 0.000 0.000 0.000 scn
+q
+0.961 0.961 0.961 scn
+52.240 756.000 m
+559.760 756.000 l
+561.969 756.000 563.760 754.209 563.760 752.000 c
+563.760 708.520 l
+563.760 706.311 561.969 704.520 559.760 704.520 c
+52.240 704.520 l
+50.031 704.520 48.240 706.311 48.240 708.520 c
+48.240 752.000 l
+48.240 754.209 50.031 756.000 52.240 756.000 c
+h
+f
+/DeviceRGB CS
+0.800 0.800 0.800 SCN
+0.75 w
+52.240 756.000 m
+559.760 756.000 l
+561.969 756.000 563.760 754.209 563.760 752.000 c
+563.760 708.520 l
+563.760 706.311 561.969 704.520 559.760 704.520 c
+52.240 704.520 l
+50.031 704.520 48.240 706.311 48.240 708.520 c
+48.240 752.000 l
+48.240 754.209 50.031 756.000 52.240 756.000 c
+h
+S
+Q
 0.200 0.200 0.200 scn
 /DeviceRGB CS
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 743.736 Td
+59.24000000000001 733.175 Td
+/F3.0 11 Tf
+<ca2420247b48424153455f484f4d457d2f62696e2f6862617365206f72672e6170616368652e6861646f6f702e68626173652e696f2e6866696c652e4846696c65202d76202d66> Tj
+ET
+
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+0.200 0.200 0.200 scn
+0.200 0.200 0.200 SCN
+
+BT
+59.24000000000001 718.435 Td
+/F3.0 11 Tf
+<686466733a2f2f31302e38312e34372e34313a383032302f68626173652f544553542f313431383432383034322f44534d502f34373539353038363138323836383435343735> Tj
+ET
+
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+0.200 0.200 0.200 scn
+0.200 0.200 0.200 SCN
+
+0.554 Tw
+
+BT
+48.24000000000001 680.5559999999999 Td
+/F1.0 10.5 Tf
+<496620796f75206c65617665206f666620746865206f7074696f6e202d7620746f20736565206a75737420612073756d6d617279206f6e20746865204846696c652e2053656520757361676520666f72206f74686572207468696e677320746f20646f2077697468> Tj
+ET
+
+
+0.000 Tw
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+0.200 0.200 0.200 scn
+0.200 0.200 0.200 SCN
+
+BT
+48.24000000000001 664.776 Td
+/F1.0 10.5 Tf
+<74686520> Tj
+ET
+
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+0.694 0.129 0.275 scn
+0.694 0.129 0.275 SCN
+
+BT
+66.93 664.776 Td
+/F3.0 10.5 Tf
+<4846696c65> Tj
+ET
+
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+0.200 0.200 0.200 scn
+0.200 0.200 0.200 SCN
+
+BT
+93.18 664.776 Td
+/F1.0 10.5 Tf
+<20746f6f6c2e> Tj
+ET
+
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+0.200 0.200 0.200 scn
+0.200 0.200 0.200 SCN
+
+BT
+48.24000000000001 634.296 Td
 /F2.0 10.5 Tf
 <53746f726546696c65204469726563746f727920537472756374757265206f6e2048444653> Tj
 ET
@@ -349004,7 +349023,7 @@ ET
 0.486 Tw
 
 BT
-48.24000000000001 718.056 Td
+48.24000000000001 608.6160000000001 Td
 /F1.0 10.5 Tf
 [<46> 40.0390625 <6f72206d6f726520696e666f726d6174696f6e206f6620776861742053746f726546696c6573206c6f6f6b206c696b> 20.01953125 <65206f6e20484446532077697468207265737065637420746f20746865206469726563746f7279207374727563747572652c20736565>] TJ
 ET
@@ -349017,7 +349036,7 @@ ET
 0.259 0.545 0.792 SCN
 
 BT
-48.24000000000001 702.2760000000001 Td
+48.24000000000001 592.8360000000001 Td
 /F1.0 10.5 Tf
 <42726f7773696e67204844465320666f72204842617365204f626a65637473> Tj
 ET
@@ -349028,7 +349047,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-217.24800000000002 702.2760000000001 Td
+217.24800000000002 592.8360000000001 Td
 /F1.0 10.5 Tf
 <2e> Tj
 ET
@@ -349039,7 +349058,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 668.8760000000002 Td
+48.24000000000001 559.4360000000003 Td
 /F2.0 13 Tf
 <36382e372e352e20426c6f636b73> Tj
 ET
@@ -349050,7 +349069,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 642.2160000000002 Td
+48.24000000000001 532.7760000000003 Td
 /F1.0 10.5 Tf
 [<53746f726546696c65732061726520636f6d706f736564206f6620626c6f636b732e2054686520626c6f636b73697a6520697320636f6e66696775726564206f6e2061207065722d436f6c756d6e46> 40.0390625 <616d696c792062617369732e>] TJ
 ET
@@ -349063,7 +349082,7 @@ ET
 0.943 Tw
 
 BT
-48.24000000000001 614.4360000000003 Td
+48.24000000000001 504.9960000000004 Td
 /F1.0 10.5 Tf
 [<436f6d7072657373696f6e2068617070656e732061742074686520626c6f636b206c6576656c2077697468696e2053746f726546696c65732e2046> 40.0390625 <6f72206d6f726520696e666f726d6174696f6e206f6e20636f6d7072657373696f6e2c20736565>] TJ
 ET
@@ -349076,7 +349095,7 @@ ET
 0.259 0.545 0.792 SCN
 
 BT
-48.24000000000001 598.6560000000003 Td
+48.24000000000001 489.21600000000035 Td
 /F1.0 10.5 Tf
 <436f6d7072657373696f6e20616e64204461746120426c6f636b20456e636f64696e6720496e204842617365> Tj
 ET
@@ -349087,7 +349106,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-288.12300000000005 598.6560000000003 Td
+288.12300000000005 489.21600000000035 Td
 /F1.0 10.5 Tf
 <2e> Tj
 ET
@@ -349098,7 +349117,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 570.8760000000003 Td
+48.24000000000001 461.4360000000004 Td
 /F1.0 10.5 Tf
 [<46> 40.0390625 <6f72206d6f726520696e666f726d6174696f6e206f6e20626c6f636b732c207365652074686520>] TJ
 ET
@@ -349109,7 +349128,7 @@ ET
 0.259 0.545 0.792 SCN
 
 BT
-250.44858984375003 570.8760000000003 Td
+250.44858984375003 461.4360000000004 Td
 /F1.0 10.5 Tf
 <4846696c65426c6f636b20736f7572636520636f6465> Tj
 ET
@@ -349120,7 +349139,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-366.53658984375005 570.8760000000003 Td
+366.53658984375005 461.4360000000004 Td
 /F1.0 10.5 Tf
 <2e> Tj
 ET
@@ -349131,7 +349150,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 537.4760000000005 Td
+48.24000000000001 428.03600000000034 Td
 /F2.0 13 Tf
 [<36382e372e362e204b> 20.01953125 <657956> 60.05859375 <616c7565>] TJ
 ET
@@ -349144,7 +349163,7 @@ ET
 0.260 Tw
 
 BT
-48.24000000000001 510.81600000000054 Td
+48.24000000000001 401.3760000000003 Td
 /F1.0 10.5 Tf
 [<546865204b> 20.01953125 <657956> 60.05859375 <616c756520636c61737320697320746865206865617274206f6620646174612073746f72> 20.01953125 <61676520696e2048426173652e204b> 20.01953125 <657956> 60.05859375 <616c7565207772> 20.01953125 <61707320612062> 20.01953125 <79746520617272> 20.01953125 <61> 20.01953125 <7920616e642074616b> 20.01953125 <6573206f666673657473>] TJ
 ET
@@ -349157,7 +349176,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 495.0360000000005 Td
+48.24000000000001 385.59600000000034 Td
 /F1.0 10.5 Tf
 [<616e64206c656e6774687320696e746f207468652070617373656420617272> 20.01953125 <61> 20.01953125 <79207768696368207370656369667920776865726520746f20737461727420696e74657270726574696e672074686520636f6e74656e74206173204b> 20.01953125 <657956> 60.05859375 <616c75652e>] TJ
 ET
@@ -349168,7 +349187,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 467.25600000000054 Td
+48.24000000000001 357.8160000000003 Td
 /F1.0 10.5 Tf
 [<546865204b> 20.01953125 <657956> 60.05859375 <616c756520666f726d617420696e7369646520612062> 20.01953125 <79746520617272> 20.01953125 <61> 20.01953125 <792069733a>] TJ
 ET
@@ -349179,7 +349198,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 439.4760000000005 Td
+53.84475000000001 330.03600000000034 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -349190,7 +349209,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 439.4760000000005 Td
+63.24000000000001 330.03600000000034 Td
 /F1.0 10.5 Tf
 [<6b> 20.01953125 <65796c656e677468>] TJ
 ET
@@ -349201,7 +349220,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 411.69600000000054 Td
+53.84475000000001 302.25600000000037 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -349212,7 +349231,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 411.69600000000054 Td
+63.24000000000001 302.25600000000037 Td
 /F1.0 10.5 Tf
 <76616c75656c656e677468> Tj
 ET
@@ -349223,7 +349242,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 383.91600000000057 Td
+53.84475000000001 274.4760000000004 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -349234,7 +349253,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 383.91600000000057 Td
+63.24000000000001 274.4760000000004 Td
 /F1.0 10.5 Tf
 [<6b> 20.01953125 <6579>] TJ
 ET
@@ -349245,7 +349264,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 356.1360000000006 Td
+53.84475000000001 246.69600000000042 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -349256,7 +349275,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 356.1360000000006 Td
+63.24000000000001 246.69600000000042 Td
 /F1.0 10.5 Tf
 <76616c7565> Tj
 ET
@@ -349267,7 +349286,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-48.24000000000001 328.3560000000006 Td
+48.24000000000001 218.91600000000042 Td
 /F1.0 10.5 Tf
 [<546865204b> 20.01953125 <65792069732066757274686572206465636f6d706f7365642061733a>] TJ
 ET
@@ -349278,7 +349297,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 300.57600000000065 Td
+53.84475000000001 191.13600000000042 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -349289,7 +349308,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 300.57600000000065 Td
+63.24000000000001 191.13600000000042 Td
 /F1.0 10.5 Tf
 <726f776c656e677468> Tj
 ET
@@ -349300,7 +349319,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 272.7960000000007 Td
+53.84475000000001 163.35600000000042 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -349311,7 +349330,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 272.7960000000007 Td
+63.24000000000001 163.35600000000042 Td
 /F1.0 10.5 Tf
 [<726f772028692e652e2c2074686520726f776b> 20.01953125 <657929>] TJ
 ET
@@ -349322,7 +349341,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 245.0160000000007 Td
+53.84475000000001 135.57600000000042 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -349333,7 +349352,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 245.0160000000007 Td
+63.24000000000001 135.57600000000042 Td
 /F1.0 10.5 Tf
 <636f6c756d6e66616d696c796c656e677468> Tj
 ET
@@ -349344,7 +349363,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 217.2360000000007 Td
+53.84475000000001 107.79600000000042 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -349355,7 +349374,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 217.2360000000007 Td
+63.24000000000001 107.79600000000042 Td
 /F1.0 10.5 Tf
 <636f6c756d6e66616d696c79> Tj
 ET
@@ -349366,7 +349385,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 189.4560000000007 Td
+53.84475000000001 80.01600000000042 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -349377,7 +349396,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 189.4560000000007 Td
+63.24000000000001 80.01600000000042 Td
 /F1.0 10.5 Tf
 <636f6c756d6e7175616c6966696572> Tj
 ET
@@ -349388,7 +349407,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-53.84475000000001 161.6760000000007 Td
+53.84475000000001 52.236000000000416 Td
 /F1.0 10.5 Tf
 <a5> Tj
 ET
@@ -349399,18 +349418,109 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-63.24000000000001 161.6760000000007 Td
+63.24000000000001 52.236000000000416 Td
 /F1.0 10.5 Tf
 <74696d657374616d70> Tj
 ET
 
 0.000 0.000 0.000 SCN
 0.000 0.000 0.000 scn
+q
+0.000 0.000 0.000 scn
+0.000 0.000 0.000 SCN
+1 w
+0 J
+0 j
+[ ] 0 d
+q
+0.5 w
+0.867 0.867 0.867 SCN
+48.240 30.120 m
+563.760 30.120 l
+S
+Q
+0.200 0.200 0.200 scn
+0.200 0.200 0.200 SCN
+
+BT
+548.6669999999999 14.508000000000001 Td
+/F1.0 9 Tf
+<323634> Tj
+ET
+
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+Q
+Q
+
+endstream
+endobj
+1410 0 obj
+<< /Type /Page
+/Parent 3 0 R
+/MediaBox [0 0 612.0 792.0]
+/Contents 1409 0 R
+/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
+/Font << /F3.0 31 0 R
+/F1.0 11 0 R
+/F2.0 10 0 R
+>>
+>>
+/Annots [1412 0 R 1414 0 R 1415 0 R]
+>>
+endobj
+1411 0 obj
+[1410 0 R /XYZ 0 648.96 null]
+endobj
+1412 0 obj
+<< /Border [0 0 0]
+/Dest (#trouble.namenode.hbase.objects)
+/Subtype /Link
+/Rect [48.24000000000001 589.7700000000001 217.248000

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerStdOutSink.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    Syste

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html
index d69dc71..21c035e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionSourceImpl.html
@@ -225,50 +225,66 @@
 <span class="sourceLineNo">217</span>              MetricsRegionServerSource.MEMSTORE_SIZE_DESC),<a name="line.217"></a>
 <span class="sourceLineNo">218</span>          this.regionWrapper.getMemstoreSize());<a name="line.218"></a>
 <span class="sourceLineNo">219</span>      mrb.addGauge(Interns.info(<a name="line.219"></a>
-<span class="sourceLineNo">220</span>              regionNamePrefix + MetricsRegionServerSource.STOREFILE_SIZE,<a name="line.220"></a>
-<span class="sourceLineNo">221</span>              MetricsRegionServerSource.STOREFILE_SIZE_DESC),<a name="line.221"></a>
-<span class="sourceLineNo">222</span>          this.regionWrapper.getStoreFileSize());<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      mrb.addCounter(Interns.info(<a name="line.223"></a>
-<span class="sourceLineNo">224</span>              regionNamePrefix + MetricsRegionSource.COMPACTIONS_COMPLETED_COUNT,<a name="line.224"></a>
-<span class="sourceLineNo">225</span>              MetricsRegionSource.COMPACTIONS_COMPLETED_DESC),<a name="line.225"></a>
-<span class="sourceLineNo">226</span>          this.regionWrapper.getNumCompactionsCompleted());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      mrb.addCounter(Interns.info(<a name="line.227"></a>
-<span class="sourceLineNo">228</span>              regionNamePrefix + MetricsRegionSource.NUM_BYTES_COMPACTED_COUNT,<a name="line.228"></a>
-<span class="sourceLineNo">229</span>              MetricsRegionSource.NUM_BYTES_COMPACTED_DESC),<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          this.regionWrapper.getNumBytesCompacted());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      mrb.addCounter(Interns.info(<a name="line.231"></a>
-<span class="sourceLineNo">232</span>              regionNamePrefix + MetricsRegionSource.NUM_FILES_COMPACTED_COUNT,<a name="line.232"></a>
-<span class="sourceLineNo">233</span>              MetricsRegionSource.NUM_FILES_COMPACTED_DESC),<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          this.regionWrapper.getNumFilesCompacted());<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      mrb.addCounter(Interns.info(<a name="line.235"></a>
-<span class="sourceLineNo">236</span>              regionNamePrefix + MetricsRegionServerSource.READ_REQUEST_COUNT,<a name="line.236"></a>
-<span class="sourceLineNo">237</span>              MetricsRegionServerSource.READ_REQUEST_COUNT_DESC),<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          this.regionWrapper.getReadRequestCount());<a name="line.238"></a>
+<span class="sourceLineNo">220</span>        regionNamePrefix + MetricsRegionServerSource.MAX_STORE_FILE_AGE,<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        MetricsRegionServerSource.MAX_STORE_FILE_AGE_DESC),<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        this.regionWrapper.getMaxStoreFileAge());<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      mrb.addGauge(Interns.info(<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        regionNamePrefix + MetricsRegionServerSource.MIN_STORE_FILE_AGE,<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        MetricsRegionServerSource.MIN_STORE_FILE_AGE_DESC),<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        this.regionWrapper.getMinStoreFileAge());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>      mrb.addGauge(Interns.info(<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        regionNamePrefix + MetricsRegionServerSource.AVG_STORE_FILE_AGE,<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        MetricsRegionServerSource.AVG_STORE_FILE_AGE_DESC),<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        this.regionWrapper.getAvgStoreFileAge());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      mrb.addGauge(Interns.info(<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        regionNamePrefix + MetricsRegionServerSource.NUM_REFERENCE_FILES,<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        MetricsRegionServerSource.NUM_REFERENCE_FILES_DESC),<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        this.regionWrapper.getNumReferenceFiles());<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      mrb.addGauge(Interns.info(<a name="line.235"></a>
+<span class="sourceLineNo">236</span>              regionNamePrefix + MetricsRegionServerSource.STOREFILE_SIZE,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>              MetricsRegionServerSource.STOREFILE_SIZE_DESC),<a name="line.237"></a>
+<span class="sourceLineNo">238</span>          this.regionWrapper.getStoreFileSize());<a name="line.238"></a>
 <span class="sourceLineNo">239</span>      mrb.addCounter(Interns.info(<a name="line.239"></a>
-<span class="sourceLineNo">240</span>              regionNamePrefix + MetricsRegionServerSource.FILTERED_READ_REQUEST_COUNT,<a name="line.240"></a>
-<span class="sourceLineNo">241</span>              MetricsRegionServerSource.FILTERED_READ_REQUEST_COUNT_DESC),<a name="line.241"></a>
-<span class="sourceLineNo">242</span>          this.regionWrapper.getFilteredReadRequestCount());<a name="line.242"></a>
+<span class="sourceLineNo">240</span>              regionNamePrefix + MetricsRegionSource.COMPACTIONS_COMPLETED_COUNT,<a name="line.240"></a>
+<span class="sourceLineNo">241</span>              MetricsRegionSource.COMPACTIONS_COMPLETED_DESC),<a name="line.241"></a>
+<span class="sourceLineNo">242</span>          this.regionWrapper.getNumCompactionsCompleted());<a name="line.242"></a>
 <span class="sourceLineNo">243</span>      mrb.addCounter(Interns.info(<a name="line.243"></a>
-<span class="sourceLineNo">244</span>              regionNamePrefix + MetricsRegionServerSource.WRITE_REQUEST_COUNT,<a name="line.244"></a>
-<span class="sourceLineNo">245</span>              MetricsRegionServerSource.WRITE_REQUEST_COUNT_DESC),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          this.regionWrapper.getWriteRequestCount());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      mrb.addCounter(Interns.info(regionNamePrefix + MetricsRegionSource.REPLICA_ID,<a name="line.247"></a>
-<span class="sourceLineNo">248</span>              MetricsRegionSource.REPLICA_ID_DESC),<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          this.regionWrapper.getReplicaId());<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
-<span class="sourceLineNo">251</span>  }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>  @Override<a name="line.253"></a>
-<span class="sourceLineNo">254</span>  public int hashCode() {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    return hashCode;<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>  @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>  public boolean equals(Object obj) {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    return obj == this ||<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        (obj instanceof MetricsRegionSourceImpl &amp;&amp; compareTo((MetricsRegionSourceImpl) obj) == 0);<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">244</span>              regionNamePrefix + MetricsRegionSource.NUM_BYTES_COMPACTED_COUNT,<a name="line.244"></a>
+<span class="sourceLineNo">245</span>              MetricsRegionSource.NUM_BYTES_COMPACTED_DESC),<a name="line.245"></a>
+<span class="sourceLineNo">246</span>          this.regionWrapper.getNumBytesCompacted());<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      mrb.addCounter(Interns.info(<a name="line.247"></a>
+<span class="sourceLineNo">248</span>              regionNamePrefix + MetricsRegionSource.NUM_FILES_COMPACTED_COUNT,<a name="line.248"></a>
+<span class="sourceLineNo">249</span>              MetricsRegionSource.NUM_FILES_COMPACTED_DESC),<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          this.regionWrapper.getNumFilesCompacted());<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      mrb.addCounter(Interns.info(<a name="line.251"></a>
+<span class="sourceLineNo">252</span>              regionNamePrefix + MetricsRegionServerSource.READ_REQUEST_COUNT,<a name="line.252"></a>
+<span class="sourceLineNo">253</span>              MetricsRegionServerSource.READ_REQUEST_COUNT_DESC),<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          this.regionWrapper.getReadRequestCount());<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      mrb.addCounter(Interns.info(<a name="line.255"></a>
+<span class="sourceLineNo">256</span>              regionNamePrefix + MetricsRegionServerSource.FILTERED_READ_REQUEST_COUNT,<a name="line.256"></a>
+<span class="sourceLineNo">257</span>              MetricsRegionServerSource.FILTERED_READ_REQUEST_COUNT_DESC),<a name="line.257"></a>
+<span class="sourceLineNo">258</span>          this.regionWrapper.getFilteredReadRequestCount());<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      mrb.addCounter(Interns.info(<a name="line.259"></a>
+<span class="sourceLineNo">260</span>              regionNamePrefix + MetricsRegionServerSource.WRITE_REQUEST_COUNT,<a name="line.260"></a>
+<span class="sourceLineNo">261</span>              MetricsRegionServerSource.WRITE_REQUEST_COUNT_DESC),<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          this.regionWrapper.getWriteRequestCount());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      mrb.addCounter(Interns.info(regionNamePrefix + MetricsRegionSource.REPLICA_ID,<a name="line.263"></a>
+<span class="sourceLineNo">264</span>              MetricsRegionSource.REPLICA_ID_DESC),<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          this.regionWrapper.getReplicaId());<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>  @Override<a name="line.269"></a>
+<span class="sourceLineNo">270</span>  public int hashCode() {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return hashCode;<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>  @Override<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  public boolean equals(Object obj) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    return obj == this ||<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        (obj instanceof MetricsRegionSourceImpl &amp;&amp; compareTo((MetricsRegionSourceImpl) obj) == 0);<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html
index 70a2716..077debd 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapper.html
@@ -83,23 +83,43 @@
 <span class="sourceLineNo">075</span>  long getFilteredReadRequestCount();<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>   * Get the total number of mutations that have been issued against this region.<a name="line.78"></a>
+<span class="sourceLineNo">078</span>   * @return Max age of store files under this region<a name="line.78"></a>
 <span class="sourceLineNo">079</span>   */<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  long getWriteRequestCount();<a name="line.80"></a>
+<span class="sourceLineNo">080</span>  long getMaxStoreFileAge();<a name="line.80"></a>
 <span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  long getNumFilesCompacted();<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  long getNumBytesCompacted();<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>  long getNumCompactionsCompleted();<a name="line.86"></a>
-<span class="sourceLineNo">087</span><a name="line.87"></a>
-<span class="sourceLineNo">088</span>  int getRegionHashCode();<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>   * Get the replica id of this region.<a name="line.91"></a>
-<span class="sourceLineNo">092</span>   */<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  int getReplicaId();<a name="line.93"></a>
-<span class="sourceLineNo">094</span>}<a name="line.94"></a>
+<span class="sourceLineNo">082</span>  /**<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * @return Min age of store files under this region<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   */<a name="line.84"></a>
+<span class="sourceLineNo">085</span>  long getMinStoreFileAge();<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>   *  @return Average age of store files under this region<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  long getAvgStoreFileAge();<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>   *  @return Number of reference files under this region<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   */<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  long getNumReferenceFiles();<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>   * Get the total number of mutations that have been issued against this region.<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   */<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  long getWriteRequestCount();<a name="line.100"></a>
+<span class="sourceLineNo">101</span><a name="line.101"></a>
+<span class="sourceLineNo">102</span>  long getNumFilesCompacted();<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  long getNumBytesCompacted();<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  long getNumCompactionsCompleted();<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>  int getRegionHashCode();<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /**<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * Get the replica id of this region.<a name="line.111"></a>
+<span class="sourceLineNo">112</span>   */<a name="line.112"></a>
+<span class="sourceLineNo">113</span>  int getReplicaId();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>}<a name="line.114"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html
index 783e06d..0bc6c0c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.HRegionMetricsWrapperRunnable.html
@@ -51,140 +51,192 @@
 <span class="sourceLineNo">043</span>  private long numStoreFiles;<a name="line.43"></a>
 <span class="sourceLineNo">044</span>  private long memstoreSize;<a name="line.44"></a>
 <span class="sourceLineNo">045</span>  private long storeFileSize;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private ScheduledFuture&lt;?&gt; regionMetricsUpdateTask;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  public MetricsRegionWrapperImpl(HRegion region) {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    this.region = region;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    this.executor = CompatibilitySingletonFactory.getInstance(MetricsExecutor.class).getExecutor();<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    this.runnable = new HRegionMetricsWrapperRunnable();<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    this.regionMetricsUpdateTask = this.executor.scheduleWithFixedDelay(this.runnable, PERIOD,<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      PERIOD, TimeUnit.SECONDS);<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  }<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  @Override<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public String getTableName() {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    HTableDescriptor tableDesc = this.region.getTableDesc();<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    if (tableDesc == null) {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      return UNKNOWN;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    }<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    return tableDesc.getTableName().getQualifierAsString();<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  public String getNamespace() {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    HTableDescriptor tableDesc = this.region.getTableDesc();<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    if (tableDesc == null) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      return UNKNOWN;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    }<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    return tableDesc.getTableName().getNamespaceAsString();<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  @Override<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  public String getRegionName() {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    HRegionInfo regionInfo = this.region.getRegionInfo();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    if (regionInfo == null) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      return UNKNOWN;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    return regionInfo.getEncodedName();<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>  @Override<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  public long getNumStores() {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    Map&lt;byte[],Store&gt; stores = this.region.stores;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    if (stores == null) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      return 0;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    return stores.size();<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>  @Override<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public long getNumStoreFiles() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    return numStoreFiles;<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>  @Override<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  public long getMemstoreSize() {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    return memstoreSize;<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>  @Override<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public long getStoreFileSize() {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return storeFileSize;<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>  @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public long getReadRequestCount() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    return this.region.getReadRequestsCount();<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>  @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public long getFilteredReadRequestCount() {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    return this.region.getFilteredReadRequestsCount();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public long getWriteRequestCount() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    return this.region.getWriteRequestsCount();<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>  @Override<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public long getNumFilesCompacted() {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    return this.region.compactionNumFilesCompacted.get();<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>  @Override<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  public long getNumBytesCompacted() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    return this.region.compactionNumBytesCompacted.get();<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 long getNumCompactionsCompleted() {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    return this.region.compactionsFinished.get();<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 int getRegionHashCode() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return this.region.hashCode();<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 class HRegionMetricsWrapperRunnable implements Runnable {<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    @Override<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    public void run() {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      long tempNumStoreFiles = 0;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      long tempMemstoreSize = 0;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      long tempStoreFileSize = 0;<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>      if (region.stores != null) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        for (Store store : region.stores.values()) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>          tempNumStoreFiles += store.getStorefilesCount();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          tempMemstoreSize += store.getMemStoreSize();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>          tempStoreFileSize += store.getStorefilesSize();<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><a name="line.159"></a>
-<span class="sourceLineNo">160</span>      numStoreFiles = tempNumStoreFiles;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      memstoreSize = tempMemstoreSize;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      storeFileSize = tempStoreFileSize;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public void close() throws IOException {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    regionMetricsUpdateTask.cancel(true);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * Get the replica id of this region.<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 int getReplicaId() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    return region.getRegionInfo().getReplicaId();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
+<span class="sourceLineNo">046</span>  private long maxStoreFileAge;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private long minStoreFileAge;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private long avgStoreFileAge;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private long numReferenceFiles;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private ScheduledFuture&lt;?&gt; regionMetricsUpdateTask;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public MetricsRegionWrapperImpl(HRegion region) {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    this.region = region;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    this.executor = CompatibilitySingletonFactory.getInstance(MetricsExecutor.class).getExecutor();<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    this.runnable = new HRegionMetricsWrapperRunnable();<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    this.regionMetricsUpdateTask = this.executor.scheduleWithFixedDelay(this.runnable, PERIOD,<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      PERIOD, TimeUnit.SECONDS);<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>  @Override<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public String getTableName() {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    HTableDescriptor tableDesc = this.region.getTableDesc();<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    if (tableDesc == null) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      return UNKNOWN;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    return tableDesc.getTableName().getQualifierAsString();<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>  @Override<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  public String getNamespace() {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    HTableDescriptor tableDesc = this.region.getTableDesc();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    if (tableDesc == null) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      return UNKNOWN;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    return tableDesc.getTableName().getNamespaceAsString();<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><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @Override<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public String getRegionName() {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    HRegionInfo regionInfo = this.region.getRegionInfo();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    if (regionInfo == null) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      return UNKNOWN;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    return regionInfo.getEncodedName();<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>  @Override<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public long getNumStores() {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    Map&lt;byte[],Store&gt; stores = this.region.stores;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    if (stores == null) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      return 0;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    return stores.size();<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>  @Override<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public long getNumStoreFiles() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    return numStoreFiles;<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>  @Override<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public long getMemstoreSize() {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    return memstoreSize;<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>  @Override<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public long getStoreFileSize() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return storeFileSize;<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>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public long getReadRequestCount() {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return this.region.getReadRequestsCount();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  @Override<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public long getFilteredReadRequestCount() {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    return this.region.getFilteredReadRequestsCount();<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>  @Override<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public long getWriteRequestCount() {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    return this.region.getWriteRequestsCount();<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>  @Override<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public long getNumFilesCompacted() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    return this.region.compactionNumFilesCompacted.get();<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>  @Override<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public long getNumBytesCompacted() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    return this.region.compactionNumBytesCompacted.get();<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>  @Override<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public long getNumCompactionsCompleted() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    return this.region.compactionsFinished.get();<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>  @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public long getMaxStoreFileAge() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return maxStoreFileAge;<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>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public long getMinStoreFileAge() {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    return minStoreFileAge;<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>  @Override<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public long getAvgStoreFileAge() {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    return avgStoreFileAge;<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>  @Override<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public long getNumReferenceFiles() {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    return numReferenceFiles;<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>  @Override<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public int getRegionHashCode() {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    return this.region.hashCode();<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>  public class HRegionMetricsWrapperRunnable implements Runnable {<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 void run() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      long tempNumStoreFiles = 0;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      long tempMemstoreSize = 0;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      long tempStoreFileSize = 0;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      long tempMaxStoreFileAge = 0;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      long tempMinStoreFileAge = Long.MAX_VALUE;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      long tempNumReferenceFiles = 0;<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">179</span>      long avgAgeNumerator = 0;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      long numHFiles = 0;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      if (region.stores != null) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        for (Store store : region.stores.values()) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          tempNumStoreFiles += store.getStorefilesCount();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>          tempMemstoreSize += store.getMemStoreSize();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          tempStoreFileSize += store.getStorefilesSize();<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>          long storeMaxStoreFileAge = store.getMaxStoreFileAge();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>          tempMaxStoreFileAge = (storeMaxStoreFileAge &gt; tempMaxStoreFileAge) ?<a name="line.188"></a>
+<span class="sourceLineNo">189</span>            storeMaxStoreFileAge : tempMaxStoreFileAge;<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>          long storeMinStoreFileAge = store.getMinStoreFileAge();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          tempMinStoreFileAge = (storeMinStoreFileAge &lt; tempMinStoreFileAge) ?<a name="line.192"></a>
+<span class="sourceLineNo">193</span>            storeMinStoreFileAge : tempMinStoreFileAge;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>          long storeHFiles = store.getNumHFiles();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          avgAgeNumerator += store.getAvgStoreFileAge() * storeHFiles;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          numHFiles += storeHFiles;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          tempNumReferenceFiles += store.getNumReferenceFiles();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>      numStoreFiles = tempNumStoreFiles;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      memstoreSize = tempMemstoreSize;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      storeFileSize = tempStoreFileSize;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      maxStoreFileAge = tempMaxStoreFileAge;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      if (tempMinStoreFileAge != Long.MAX_VALUE) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        minStoreFileAge = tempMinStoreFileAge;<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>      if (numHFiles != 0) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        avgStoreFileAge = avgAgeNumerator / numHFiles;<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>      numReferenceFiles = tempNumReferenceFiles;<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>  @Override<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public void close() throws IOException {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    regionMetricsUpdateTask.cancel(true);<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>  /**<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * Get the replica id of this region.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  @Override<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public int getReplicaId() {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return region.getRegionInfo().getReplicaId();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>}<a name="line.231"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html
index 783e06d..0bc6c0c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.html
@@ -51,140 +51,192 @@
 <span class="sourceLineNo">043</span>  private long numStoreFiles;<a name="line.43"></a>
 <span class="sourceLineNo">044</span>  private long memstoreSize;<a name="line.44"></a>
 <span class="sourceLineNo">045</span>  private long storeFileSize;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private ScheduledFuture&lt;?&gt; regionMetricsUpdateTask;<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  public MetricsRegionWrapperImpl(HRegion region) {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    this.region = region;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    this.executor = CompatibilitySingletonFactory.getInstance(MetricsExecutor.class).getExecutor();<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    this.runnable = new HRegionMetricsWrapperRunnable();<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    this.regionMetricsUpdateTask = this.executor.scheduleWithFixedDelay(this.runnable, PERIOD,<a name="line.53"></a>
-<span class="sourceLineNo">054</span>      PERIOD, TimeUnit.SECONDS);<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  }<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  @Override<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  public String getTableName() {<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    HTableDescriptor tableDesc = this.region.getTableDesc();<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    if (tableDesc == null) {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>      return UNKNOWN;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    }<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    return tableDesc.getTableName().getQualifierAsString();<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>  @Override<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  public String getNamespace() {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    HTableDescriptor tableDesc = this.region.getTableDesc();<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    if (tableDesc == null) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      return UNKNOWN;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    }<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    return tableDesc.getTableName().getNamespaceAsString();<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>  @Override<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  public String getRegionName() {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    HRegionInfo regionInfo = this.region.getRegionInfo();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    if (regionInfo == null) {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      return UNKNOWN;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    }<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    return regionInfo.getEncodedName();<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>  @Override<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  public long getNumStores() {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    Map&lt;byte[],Store&gt; stores = this.region.stores;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    if (stores == null) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>      return 0;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    return stores.size();<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>  @Override<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public long getNumStoreFiles() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    return numStoreFiles;<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>  @Override<a name="line.99"></a>
-<span class="sourceLineNo">100</span>  public long getMemstoreSize() {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    return memstoreSize;<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>  @Override<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  public long getStoreFileSize() {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return storeFileSize;<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>  @Override<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public long getReadRequestCount() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    return this.region.getReadRequestsCount();<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>  @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>  public long getFilteredReadRequestCount() {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    return this.region.getFilteredReadRequestsCount();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>  @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  public long getWriteRequestCount() {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    return this.region.getWriteRequestsCount();<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>  @Override<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  public long getNumFilesCompacted() {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    return this.region.compactionNumFilesCompacted.get();<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>  @Override<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  public long getNumBytesCompacted() {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    return this.region.compactionNumBytesCompacted.get();<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 long getNumCompactionsCompleted() {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    return this.region.compactionsFinished.get();<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 int getRegionHashCode() {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return this.region.hashCode();<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 class HRegionMetricsWrapperRunnable implements Runnable {<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>    @Override<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    public void run() {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      long tempNumStoreFiles = 0;<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      long tempMemstoreSize = 0;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      long tempStoreFileSize = 0;<a name="line.150"></a>
-<span class="sourceLineNo">151</span><a name="line.151"></a>
-<span class="sourceLineNo">152</span>      if (region.stores != null) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        for (Store store : region.stores.values()) {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>          tempNumStoreFiles += store.getStorefilesCount();<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          tempMemstoreSize += store.getMemStoreSize();<a name="line.155"></a>
-<span class="sourceLineNo">156</span>          tempStoreFileSize += store.getStorefilesSize();<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><a name="line.159"></a>
-<span class="sourceLineNo">160</span>      numStoreFiles = tempNumStoreFiles;<a name="line.160"></a>
-<span class="sourceLineNo">161</span>      memstoreSize = tempMemstoreSize;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>      storeFileSize = tempStoreFileSize;<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    }<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  }<a name="line.164"></a>
-<span class="sourceLineNo">165</span><a name="line.165"></a>
-<span class="sourceLineNo">166</span>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public void close() throws IOException {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    regionMetricsUpdateTask.cancel(true);<a name="line.168"></a>
-<span class="sourceLineNo">169</span>  }<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>  /**<a name="line.171"></a>
-<span class="sourceLineNo">172</span>   * Get the replica id of this region.<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 int getReplicaId() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    return region.getRegionInfo().getReplicaId();<a name="line.176"></a>
-<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
+<span class="sourceLineNo">046</span>  private long maxStoreFileAge;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private long minStoreFileAge;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private long avgStoreFileAge;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private long numReferenceFiles;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private ScheduledFuture&lt;?&gt; regionMetricsUpdateTask;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public MetricsRegionWrapperImpl(HRegion region) {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    this.region = region;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    this.executor = CompatibilitySingletonFactory.getInstance(MetricsExecutor.class).getExecutor();<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    this.runnable = new HRegionMetricsWrapperRunnable();<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    this.regionMetricsUpdateTask = this.executor.scheduleWithFixedDelay(this.runnable, PERIOD,<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      PERIOD, TimeUnit.SECONDS);<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>  @Override<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  public String getTableName() {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    HTableDescriptor tableDesc = this.region.getTableDesc();<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    if (tableDesc == null) {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      return UNKNOWN;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    return tableDesc.getTableName().getQualifierAsString();<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>  @Override<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  public String getNamespace() {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    HTableDescriptor tableDesc = this.region.getTableDesc();<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    if (tableDesc == null) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      return UNKNOWN;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    }<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    return tableDesc.getTableName().getNamespaceAsString();<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><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @Override<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public String getRegionName() {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    HRegionInfo regionInfo = this.region.getRegionInfo();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    if (regionInfo == null) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      return UNKNOWN;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    return regionInfo.getEncodedName();<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>  @Override<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public long getNumStores() {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    Map&lt;byte[],Store&gt; stores = this.region.stores;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    if (stores == null) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      return 0;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    return stores.size();<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>  @Override<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public long getNumStoreFiles() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    return numStoreFiles;<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>  @Override<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public long getMemstoreSize() {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    return memstoreSize;<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>  @Override<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public long getStoreFileSize() {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    return storeFileSize;<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>  @Override<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  public long getReadRequestCount() {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    return this.region.getReadRequestsCount();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  @Override<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public long getFilteredReadRequestCount() {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    return this.region.getFilteredReadRequestsCount();<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>  @Override<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public long getWriteRequestCount() {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    return this.region.getWriteRequestsCount();<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>  @Override<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public long getNumFilesCompacted() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    return this.region.compactionNumFilesCompacted.get();<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>  @Override<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  public long getNumBytesCompacted() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    return this.region.compactionNumBytesCompacted.get();<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>  @Override<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  public long getNumCompactionsCompleted() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    return this.region.compactionsFinished.get();<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>  @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public long getMaxStoreFileAge() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    return maxStoreFileAge;<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>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public long getMinStoreFileAge() {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    return minStoreFileAge;<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>  @Override<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public long getAvgStoreFileAge() {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    return avgStoreFileAge;<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>  @Override<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public long getNumReferenceFiles() {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    return numReferenceFiles;<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>  @Override<a name="line.163"></a>
+<span class="sourceLineNo">164</span>  public int getRegionHashCode() {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    return this.region.hashCode();<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>  public class HRegionMetricsWrapperRunnable implements Runnable {<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 void run() {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      long tempNumStoreFiles = 0;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      long tempMemstoreSize = 0;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      long tempStoreFileSize = 0;<a name="line.174"></a>
+<span class="sourceLineNo">175</span>      long tempMaxStoreFileAge = 0;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      long tempMinStoreFileAge = Long.MAX_VALUE;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>      long tempNumReferenceFiles = 0;<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">179</span>      long avgAgeNumerator = 0;<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      long numHFiles = 0;<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      if (region.stores != null) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>        for (Store store : region.stores.values()) {<a name="line.182"></a>
+<span class="sourceLineNo">183</span>          tempNumStoreFiles += store.getStorefilesCount();<a name="line.183"></a>
+<span class="sourceLineNo">184</span>          tempMemstoreSize += store.getMemStoreSize();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          tempStoreFileSize += store.getStorefilesSize();<a name="line.185"></a>
+<span class="sourceLineNo">186</span><a name="line.186"></a>
+<span class="sourceLineNo">187</span>          long storeMaxStoreFileAge = store.getMaxStoreFileAge();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>          tempMaxStoreFileAge = (storeMaxStoreFileAge &gt; tempMaxStoreFileAge) ?<a name="line.188"></a>
+<span class="sourceLineNo">189</span>            storeMaxStoreFileAge : tempMaxStoreFileAge;<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>          long storeMinStoreFileAge = store.getMinStoreFileAge();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          tempMinStoreFileAge = (storeMinStoreFileAge &lt; tempMinStoreFileAge) ?<a name="line.192"></a>
+<span class="sourceLineNo">193</span>            storeMinStoreFileAge : tempMinStoreFileAge;<a name="line.193"></a>
+<span class="sourceLineNo">194</span><a name="line.194"></a>
+<span class="sourceLineNo">195</span>          long storeHFiles = store.getNumHFiles();<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          avgAgeNumerator += store.getAvgStoreFileAge() * storeHFiles;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          numHFiles += storeHFiles;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>          tempNumReferenceFiles += store.getNumReferenceFiles();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        }<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      }<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>      numStoreFiles = tempNumStoreFiles;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      memstoreSize = tempMemstoreSize;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      storeFileSize = tempStoreFileSize;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      maxStoreFileAge = tempMaxStoreFileAge;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      if (tempMinStoreFileAge != Long.MAX_VALUE) {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        minStoreFileAge = tempMinStoreFileAge;<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>      if (numHFiles != 0) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>        avgStoreFileAge = avgAgeNumerator / numHFiles;<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>      numReferenceFiles = tempNumReferenceFiles;<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>  @Override<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public void close() throws IOException {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    regionMetricsUpdateTask.cancel(true);<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>  /**<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * Get the replica id of this region.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  @Override<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public int getReplicaId() {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return region.getRegionInfo().getReplicaId();<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>}<a name="line.231"></a>
 
 
 


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 0b7931c..8aaa409 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -323,22 +323,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="serverManager">
+<a name="frags">
 <!--   -->
 </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.275">serverManager</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="catalogJanitorEnabled">
+<a name="format">
 <!--   -->
 </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.282">catalogJanitorEnabled</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/master/MasterStatusTmpl.html#line.282">format</a></pre>
 </li>
 </ul>
 <a name="deadServers">
@@ -359,13 +359,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <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>
 </li>
 </ul>
-<a name="format">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <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/master/MasterStatusTmpl.html#line.303">format</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.303">servers</a></pre>
 </li>
 </ul>
 <a name="filter">
@@ -377,31 +377,31 @@ 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.310">filter</a></pre>
 </li>
 </ul>
-<a name="metaLocation">
+<a name="serverManager">
 <!--   -->
 </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.317">metaLocation</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.317">serverManager</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.324">servers</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.324">metaLocation</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.331">frags</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,22 +473,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setFrags(java.util.Map)">
 <!--   -->
 </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.276">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>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="setCatalogJanitorEnabled(boolean)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </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.283">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
+<h4>setFormat</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">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="setDeadServers(java.util.Set)">
@@ -509,13 +509,13 @@ 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.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>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</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.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>
+<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.304">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="setFilter(java.lang.String)">
@@ -527,31 +527,31 @@ 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.311">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="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </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.318">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</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.318">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="setServers(java.util.List)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </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.325">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>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.325">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="setFrags(java.util.Map)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </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.332">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>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/f6cc9224/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 ab02056..89cf189 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -264,22 +264,22 @@ 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="serverManager">
+<a name="frags">
 <!--   -->
 </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.63">serverManager</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="catalogJanitorEnabled">
+<a name="format">
 <!--   -->
 </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.64">catalogJanitorEnabled</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/master/MasterStatusTmplImpl.html#line.64">format</a></pre>
 </li>
 </ul>
 <a name="deadServers">
@@ -300,13 +300,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <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>
 </li>
 </ul>
-<a name="format">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <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/master/MasterStatusTmplImpl.html#line.67">format</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.67">servers</a></pre>
 </li>
 </ul>
 <a name="filter">
@@ -318,31 +318,31 @@ 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.68">filter</a></pre>
 </li>
 </ul>
-<a name="metaLocation">
+<a name="serverManager">
 <!--   -->
 </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.69">metaLocation</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.69">serverManager</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.70">servers</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.70">metaLocation</a></pre>
 </li>
 </ul>
-<a name="frags">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <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.71">frags</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/f6cc9224/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 754b178..0b5d3ba 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_bcn">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcn</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_bcn</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_bcn__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcn__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_bcn__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_format">
+<a name="m_bcn">
 <!--   -->
 </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.100">m_format</a></pre>
+<h4>m_bcn</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_bcn</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_bcn__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.105">m_format__IsNotDefault</a></pre>
+<h4>m_bcn__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_bcn__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_bcv">
@@ -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="setBcn(java.lang.String)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcn</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.73">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;bcn)</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="getBcn()">
+<a name="getFormat()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcn</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">getBcn</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="getBcn__IsNotDefault()">
+<a name="getFormat__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcn__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getBcn__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="setFormat(java.lang.String)">
+<a name="setBcn(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.90">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>setBcn</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">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;bcn)</pre>
 </li>
 </ul>
-<a name="getFormat()">
+<a name="getBcn()">
 <!--   -->
 </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.96">getFormat</a>()</pre>
+<h4>getBcn</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">getBcn</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getBcn__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.101">getFormat__IsNotDefault</a>()</pre>
+<h4>getBcn__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getBcn__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setBcv(java.lang.String)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 25ec26c..3968982 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="bcn">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcn</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">bcn</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="format">
+<a name="bcn">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.158">format</a></pre>
+<h4>bcn</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">bcn</a></pre>
 </li>
 </ul>
 <a name="bcv">
@@ -388,22 +388,22 @@ extends org.jamon.AbstractTemplateProxy</pre>
 </dl>
 </li>
 </ul>
-<a name="setBcn(java.lang.String)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcn</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">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>
+<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="setFormat(java.lang.String)">
+<a name="setBcn(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.159">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>setBcn</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">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="setBcv(java.lang.String)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/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 c70a745..f9484ac 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="bcn">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcn</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">bcn</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="format">
+<a name="bcn">
 <!--   -->
 </a>
 <ul class="blockList">
 <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.30">format</a></pre>
+<h4>bcn</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">bcn</a></pre>
 </li>
 </ul>
 <a name="bcv">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html
index 5ad8f7a..2a311fd 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.106">Canary.ExtendedSink</a>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.109">Canary.ExtendedSink</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></pre>
 </li>
 </ul>
@@ -136,7 +136,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" t
 <!--   -->
 </a>
 <h3>Methods inherited from interface&nbsp;org.apache.hadoop.hbase.tool.<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishReadTiming</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishWriteFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishWriteFailure</a>,
  <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishWriteTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishWriteTiming</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#getReadFailureCount()">getReadFailureCount</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#getWriteFailureCount()">getWriteFailureCount</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#incReadFailureCount()">incReadFailureCount</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishReadFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishReadTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishReadTiming</a>, <a href="../../../../../org/apache/hadoo
 p/hbase/tool/Canary.Sink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20java.lang.Exception)">publishWriteFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishWriteFailure(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20java.lang.Exception)">publishWriteFailure</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html#publishWriteTiming(org.apache.hadoop.hbase.HRegionInfo,%20org.apache.hadoop.hbase.HColumnDescriptor,%20long)">publishWriteTiming</a></code></li>
 </ul>
 </li>
 </ul>
@@ -158,7 +158,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" t
 <ul class="blockList">
 <li class="blockList">
 <h4>publishReadFailure</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html#line.107">publishReadFailure</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;table,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html#line.110">publishReadFailure</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;table,
                       <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;server)</pre>
 </li>
 </ul>
@@ -168,7 +168,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" t
 <ul class="blockListLast">
 <li class="blockList">
 <h4>publishReadTiming</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html#line.108">publishReadTiming</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;table,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.ExtendedSink.html#line.111">publishReadTiming</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;table,
                      <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;server,
                      long&nbsp;msTime)</pre>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.Monitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.Monitor.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.Monitor.html
index 3f3f67e..54234a0 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.Monitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.Monitor.html
@@ -107,7 +107,7 @@
 </dl>
 <hr>
 <br>
-<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.678">Canary.Monitor</a>
+<pre>public abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.710">Canary.Monitor</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="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a></pre>
 </li>
@@ -162,6 +162,10 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#treatFailureAsError">treatFailureAsError</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#useRegExp">useRegExp</a></strong></code>&nbsp;</td>
 </tr>
 </table>
@@ -181,11 +185,12 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>protected </code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#Canary.Monitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService)">Canary.Monitor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#Canary.Monitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean)">Canary.Monitor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                             <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;monitorTargets,
                             boolean&nbsp;useRegExp,
                             <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
-                            <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor)</code>&nbsp;</td>
+                            <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
+                            boolean&nbsp;treatFailureAsError)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -208,17 +213,21 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#hasError()">hasError</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#finalCheckForErrors()">finalCheckForErrors</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#hasError()">hasError</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#initAdmin()">initAdmin</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#isDone()">isDone</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>abstract void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#run()">run</a></strong>()</code>&nbsp;</td>
 </tr>
@@ -250,7 +259,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>connection</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.680">connection</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.712">connection</a></pre>
 </li>
 </ul>
 <a name="admin">
@@ -259,7 +268,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>admin</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.681">admin</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.713">admin</a></pre>
 </li>
 </ul>
 <a name="targets">
@@ -268,7 +277,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>targets</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/tool/Canary.Monitor.html#line.682">targets</a></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/tool/Canary.Monitor.html#line.714">targets</a></pre>
 </li>
 </ul>
 <a name="useRegExp">
@@ -277,7 +286,16 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>useRegExp</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.683">useRegExp</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.715">useRegExp</a></pre>
+</li>
+</ul>
+<a name="treatFailureAsError">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>treatFailureAsError</h4>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.716">treatFailureAsError</a></pre>
 </li>
 </ul>
 <a name="initialized">
@@ -286,7 +304,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>initialized</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.684">initialized</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.717">initialized</a></pre>
 </li>
 </ul>
 <a name="done">
@@ -295,7 +313,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>done</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.686">done</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.719">done</a></pre>
 </li>
 </ul>
 <a name="errorCode">
@@ -304,7 +322,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>errorCode</h4>
-<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.687">errorCode</a></pre>
+<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.720">errorCode</a></pre>
 </li>
 </ul>
 <a name="sink">
@@ -313,7 +331,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>sink</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.688">sink</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.721">sink</a></pre>
 </li>
 </ul>
 <a name="executor">
@@ -322,7 +340,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>executor</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.689">executor</a></pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.722">executor</a></pre>
 </li>
 </ul>
 </li>
@@ -333,17 +351,18 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="Canary.Monitor(org.apache.hadoop.hbase.client.Connection, java.lang.String[], boolean, org.apache.hadoop.hbase.tool.Canary.Sink, java.util.concurrent.ExecutorService)">
+<a name="Canary.Monitor(org.apache.hadoop.hbase.client.Connection, java.lang.String[], boolean, org.apache.hadoop.hbase.tool.Canary.Sink, java.util.concurrent.ExecutorService, boolean)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Canary.Monitor</h4>
-<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.704">Canary.Monitor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre>protected&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.749">Canary.Monitor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
               <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;monitorTargets,
               boolean&nbsp;useRegExp,
               <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
-              <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor)</pre>
+              <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
+              boolean&nbsp;treatFailureAsError)</pre>
 </li>
 </ul>
 </li>
@@ -360,7 +379,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>isDone</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.691">isDone</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.724">isDone</a>()</pre>
 </li>
 </ul>
 <a name="hasError()">
@@ -369,7 +388,16 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>hasError</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.695">hasError</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.728">hasError</a>()</pre>
+</li>
+</ul>
+<a name="finalCheckForErrors()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>finalCheckForErrors</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.732">finalCheckForErrors</a>()</pre>
 </li>
 </ul>
 <a name="close()">
@@ -378,7 +406,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.700">close</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.745">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><strong>Specified by:</strong></dt>
@@ -395,7 +423,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.716">run</a>()</pre>
+<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.762">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>
@@ -408,7 +436,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>initAdmin</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.718">initAdmin</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.Monitor.html#line.764">initAdmin</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html
index 7c71bd4..bc3754b 100644
--- a/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.735">Canary.RegionMonitor</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.html#line.781">Canary.RegionMonitor</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></pre>
 </li>
 </ul>
@@ -170,7 +170,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.tool.<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#admin">admin</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#connection">connection</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#done">done</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#errorCode">errorCode</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#executor">executor</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#initialized">initialized</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#sink">sink</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#targets">targets</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#useRegExp">useRegExp</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#admin">admin</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#connection">connection</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#done">done</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#errorCode">errorCode</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#executor">executor</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#initialized">initialized</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#sink">sink</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#targets">targets</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#treatFailureAsError">treatFailureAsError</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#useRegExp">useRegExp</a></code></li
 >
 </ul>
 </li>
 </ul>
@@ -186,13 +186,14 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean,%20org.apache.hadoop.hbase.TableName)">Canary.RegionMonitor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection,%20java.lang.String[],%20boolean,%20org.apache.hadoop.hbase.tool.Canary.Sink,%20java.util.concurrent.ExecutorService,%20boolean,%20org.apache.hadoop.hbase.TableName,%20boolean)">Canary.RegionMonitor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                                         <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;monitorTargets,
                                         boolean&nbsp;useRegExp,
                                         <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
                                         <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
                                         boolean&nbsp;writeSniffing,
-                                        <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;writeTableName)</code>&nbsp;</td>
+                                        <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;writeTableName,
+                                        boolean&nbsp;treatFailureAsError)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -235,7 +236,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.tool.<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html" title="class in org.apache.hadoop.hbase.tool">Canary.Monitor</a></h3>
-<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#hasError()">hasError</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#initAdmin()">initAdmin</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#isDone()">isDone</a></code></li>
+<code><a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#close()">close</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#finalCheckForErrors()">finalCheckForErrors</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#hasError()">hasError</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#initAdmin()">initAdmin</a>, <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html#isDone()">isDone</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -264,7 +265,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WRITE_TABLE_CHECK_PERIOD</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.737">DEFAULT_WRITE_TABLE_CHECK_PERIOD</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.783">DEFAULT_WRITE_TABLE_CHECK_PERIOD</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.RegionMonitor.DEFAULT_WRITE_TABLE_CHECK_PERIOD">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -274,7 +275,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WRITE_DATA_TTL</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.739">DEFAULT_WRITE_DATA_TTL</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.785">DEFAULT_WRITE_DATA_TTL</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.tool.Canary.RegionMonitor.DEFAULT_WRITE_DATA_TTL">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -284,7 +285,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>lastCheckTime</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.741">lastCheckTime</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.787">lastCheckTime</a></pre>
 </li>
 </ul>
 <a name="writeSniffing">
@@ -293,7 +294,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeSniffing</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.742">writeSniffing</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.788">writeSniffing</a></pre>
 </li>
 </ul>
 <a name="writeTableName">
@@ -302,7 +303,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeTableName</h4>
-<pre>private&nbsp;<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/tool/Canary.RegionMonitor.html#line.743">writeTableName</a></pre>
+<pre>private&nbsp;<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/tool/Canary.RegionMonitor.html#line.789">writeTableName</a></pre>
 </li>
 </ul>
 <a name="writeDataTTL">
@@ -311,7 +312,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeDataTTL</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.744">writeDataTTL</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.790">writeDataTTL</a></pre>
 </li>
 </ul>
 <a name="regionsLowerLimit">
@@ -320,7 +321,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsLowerLimit</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.745">regionsLowerLimit</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.791">regionsLowerLimit</a></pre>
 </li>
 </ul>
 <a name="regionsUpperLimit">
@@ -329,7 +330,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>regionsUpperLimit</h4>
-<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.746">regionsUpperLimit</a></pre>
+<pre>private&nbsp;float <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.792">regionsUpperLimit</a></pre>
 </li>
 </ul>
 <a name="checkPeriod">
@@ -338,7 +339,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>checkPeriod</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.747">checkPeriod</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.793">checkPeriod</a></pre>
 </li>
 </ul>
 </li>
@@ -349,19 +350,20 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection, java.lang.String[], boolean, org.apache.hadoop.hbase.tool.Canary.Sink, java.util.concurrent.ExecutorService, boolean, org.apache.hadoop.hbase.TableName)">
+<a name="Canary.RegionMonitor(org.apache.hadoop.hbase.client.Connection, java.lang.String[], boolean, org.apache.hadoop.hbase.tool.Canary.Sink, java.util.concurrent.ExecutorService, boolean, org.apache.hadoop.hbase.TableName, boolean)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Canary.RegionMonitor</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.749">Canary.RegionMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.795">Canary.RegionMonitor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                     <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;monitorTargets,
                     boolean&nbsp;useRegExp,
                     <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Sink.html" title="interface in org.apache.hadoop.hbase.tool">Canary.Sink</a>&nbsp;sink,
                     <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;executor,
                     boolean&nbsp;writeSniffing,
-                    <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;writeTableName)</pre>
+                    <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;writeTableName,
+                    boolean&nbsp;treatFailureAsError)</pre>
 </li>
 </ul>
 </li>
@@ -378,7 +380,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.767">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.814">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>
@@ -393,7 +395,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>generateMonitorTables</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>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.810">generateMonitorTables</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;monitorTargets)
+<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>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.857">generateMonitorTables</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;monitorTargets)
                                 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>
@@ -405,7 +407,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>sniff</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/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.856">sniff</a>(<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a>&nbsp;taskType)
+<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/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.903">sniff</a>(<a href="../../../../../org/apache/hadoop/hbase/tool/Canary.RegionTask.TaskType.html" title="enum in org.apache.hadoop.hbase.tool">Canary.RegionTask.TaskType</a>&nbsp;taskType)
                           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>
@@ -417,7 +419,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkWriteTableDistribution</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.870">checkWriteTableDistribution</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.917">checkWriteTableDistribution</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>
@@ -429,7 +431,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/tool/Canary.Monitor.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>createWriteTable</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.903">createWriteTable</a>(int&nbsp;numberOfServers)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/tool/Canary.RegionMonitor.html#line.950">createWriteTable</a>(int&nbsp;numberOfServers)
                        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>


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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html
index 0cc571b..f0d9e09 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.html
@@ -299,1507 +299,1514 @@
 <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>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @return True if this file was made by a major compaction.<a name="line.294"></a>
+<span class="sourceLineNo">294</span>   * @return True if this is HFile.<a name="line.294"></a>
 <span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public boolean isMajorCompaction() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (this.majorCompaction == null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throw new NullPointerException("This has not been set yet");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.majorCompaction.get();<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>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return True if this file should not be part of a minor compaction.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public boolean excludeFromMinorCompaction() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    return this.excludeFromMinorCompaction;<a name="line.307"></a>
+<span class="sourceLineNo">296</span>  public boolean isHFile() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.fileInfo.isHFile(this.fileInfo.getPath());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<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>   * @return True if this file was made by a major compaction.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public boolean isMajorCompaction() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    if (this.majorCompaction == null) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      throw new NullPointerException("This has not been set yet");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return this.majorCompaction.get();<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>  /**<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return This files maximum edit sequence id.<a name="line.311"></a>
+<span class="sourceLineNo">311</span>   * @return True if this file should not be part of a minor compaction.<a name="line.311"></a>
 <span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public long getMaxSequenceId() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return this.sequenceid;<a name="line.314"></a>
+<span class="sourceLineNo">313</span>  public boolean excludeFromMinorCompaction() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return this.excludeFromMinorCompaction;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Only used by the Striped Compaction Policy<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param key<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @return value associated with the metadata key<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return metadataMap.get(key);<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Return the largest memstoreTS found across all storefiles in<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * the given list. Store files that were created by a mapreduce<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * does not yet have any store files.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long max = 0;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (StoreFile sf : sfs) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!sf.isBulkLoadResult()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        max = Math.max(max, sf.getMaxMemstoreTS());<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>    return max;<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>   * Return the highest sequence ID found across all storefiles in<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * the given list.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param sfs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * does not yet have any store files.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long max = 0;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (StoreFile sf : sfs) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return max;<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>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Check if this storefile was created by bulk load.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * explicitly turned off.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @return true if this storefile was created by bulk load.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean isBulkLoadResult() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean bulkLoadedHFile = false;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    String fileName = this.getPath().getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (startPos != -1) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      bulkLoadedHFile = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @VisibleForTesting<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public boolean isCompactedAway() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (this.reader != null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return this.reader.isCompactedAway();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  @VisibleForTesting<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public int getRefCount() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return this.reader.refCount.get();<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>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Return the timestamp at which this bulk load file was generated.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public long getBulkLoadTimestamp() {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * calculated when store file is opened.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return this.fileInfo.getHDFSBlockDistribution();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return Reader for the store file.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IOException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @see #closeReader(boolean)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    if (this.reader != null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throw new IllegalAccessError("Already open");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // Open the StoreFile.Reader<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Read in our metadata.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (b != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // since store files are distinguished by sequence id, the one half would<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // subsume the other.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.sequenceid = Bytes.toLong(b);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      if (fileInfo.isTopReference()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        this.sequenceid += 1;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (isBulkLoadResult()){<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // generate the sequenceId from the fileName<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      String fileName = this.getPath().getName();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (startPos != -1) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            fileName.indexOf('_', startPos + 6)));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        // Handle reference files as done above.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (fileInfo.isTopReference()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // have the same row key but different seqIds.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      this.reader.setBulkLoaded(true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (b != null) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (b != null) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      boolean mc = Bytes.toBoolean(b);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (this.majorCompaction == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.majorCompaction.set(mc);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      this.majorCompaction = new AtomicBoolean(false);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (cfBloomType != BloomType.NONE) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (hfileBloomType != cfBloomType) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.info("HFile Bloom filter type for "<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            + "configuration");<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (timerangeBytes != null) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    } catch (IllegalArgumentException e) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          "proceeding without", e);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.reader.timeRangeTracker = null;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // initialize so we can reuse them after reader closed.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    firstKey = reader.getFirstKey();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    lastKey = reader.getLastKey();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    comparator = reader.getComparator();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.reader;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public Reader createReader() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return createReader(false);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * @return Reader for StoreFile. creates if necessary<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @throws IOException<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    if (this.reader == null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        this.reader = open(canUseDropBehind);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (IOException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        try {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          boolean evictOnClose =<a name="line.538"></a>
-<span class="sourceLineNo">539</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.539"></a>
-<span class="sourceLineNo">540</span>          this.closeReader(evictOnClose);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        } catch (IOException ee) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        throw e;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return this.reader;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<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>   * @return Current reader.  Must call createReader first else returns null.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @see #createReader()<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public Reader getReader() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this.reader;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @throws IOException<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   */<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (this.reader != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      this.reader.close(evictOnClose);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      this.reader = null;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * Marks the status of the file as compactedAway.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public void markCompactedAway() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    if (this.reader != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      this.reader.markCompactedAway();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * Delete this file<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @throws IOException<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  public void deleteReader() throws IOException {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    boolean evictOnClose =<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.585"></a>
-<span class="sourceLineNo">586</span>    closeReader(evictOnClose);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    this.fs.delete(getPath(), true);<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>  @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public String toString() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return this.fileInfo.toString();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public String toStringDetailed() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    StringBuilder sb = new StringBuilder();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    sb.append(this.getPath().toString());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    sb.append(", isReference=").append(isReference());<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (isBulkLoadResult()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return sb.toString();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @return Whether to skip resetting the sequence id.<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      justification="Will not overflow")<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  public static class WriterBuilder {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    private final Configuration conf;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final CacheConfig cacheConf;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private final FileSystem fs;<a name="line.630"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @return This files maximum edit sequence id.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public long getMaxSequenceId() {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this.sequenceid;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * Only used by the Striped Compaction Policy<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @param key<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @return value associated with the metadata key<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return metadataMap.get(key);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<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>   * Return the largest memstoreTS found across all storefiles in<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * the given list. Store files that were created by a mapreduce<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * does not yet have any store files.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    long max = 0;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (StoreFile sf : sfs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (!sf.isBulkLoadResult()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        max = Math.max(max, sf.getMaxMemstoreTS());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return max;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Return the highest sequence ID found across all storefiles in<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * the given list.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param sfs<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * does not yet have any store files.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    long max = 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    for (StoreFile sf : sfs) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return max;<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>  /**<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * Check if this storefile was created by bulk load.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * explicitly turned off.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @return true if this storefile was created by bulk load.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean isBulkLoadResult() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    boolean bulkLoadedHFile = false;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String fileName = this.getPath().getName();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (startPos != -1) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      bulkLoadedHFile = true;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @VisibleForTesting<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  public boolean isCompactedAway() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (this.reader != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return this.reader.isCompactedAway();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return true;<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>  @VisibleForTesting<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public int getRefCount() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return this.reader.refCount.get();<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 timestamp at which this bulk load file was generated.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public long getBulkLoadTimestamp() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * calculated when store file is opened.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return this.fileInfo.getHDFSBlockDistribution();<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>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return Reader for the store file.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @throws IOException<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @see #closeReader(boolean)<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (this.reader != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      throw new IllegalAccessError("Already open");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Open the StoreFile.Reader<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // Read in our metadata.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    if (b != null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // since store files are distinguished by sequence id, the one half would<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      // subsume the other.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      this.sequenceid = Bytes.toLong(b);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      if (fileInfo.isTopReference()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        this.sequenceid += 1;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (isBulkLoadResult()){<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // generate the sequenceId from the fileName<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      String fileName = this.getPath().getName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      if (startPos != -1) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            fileName.indexOf('_', startPos + 6)));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        // Handle reference files as done above.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        if (fileInfo.isTopReference()) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      // have the same row key but different seqIds.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      this.reader.setBulkLoaded(true);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (b != null) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    if (b != null) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      boolean mc = Bytes.toBoolean(b);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      if (this.majorCompaction == null) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      } else {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        this.majorCompaction.set(mc);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      this.majorCompaction = new AtomicBoolean(false);<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>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    if (cfBloomType != BloomType.NONE) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (hfileBloomType != cfBloomType) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        LOG.info("HFile Bloom filter type for "<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            + "configuration");<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (timerangeBytes != null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IllegalArgumentException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.520"></a>
+<span class="sourceLineNo">521</span>          "proceeding without", e);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      this.reader.timeRangeTracker = null;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // initialize so we can reuse them after reader closed.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    firstKey = reader.getFirstKey();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    lastKey = reader.getLastKey();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    comparator = reader.getComparator();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return this.reader;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>  public Reader createReader() throws IOException {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    return createReader(false);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>  /**<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @return Reader for StoreFile. creates if necessary<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @throws IOException<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (this.reader == null) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        this.reader = open(canUseDropBehind);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (IOException e) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        try {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          boolean evictOnClose =<a name="line.545"></a>
+<span class="sourceLineNo">546</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.546"></a>
+<span class="sourceLineNo">547</span>          this.closeReader(evictOnClose);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        } catch (IOException ee) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        throw e;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return this.reader;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * @return Current reader.  Must call createReader first else returns null.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @see #createReader()<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   */<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public Reader getReader() {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    return this.reader;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
+<span class="sourceLineNo">564</span><a name="line.564"></a>
+<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    if (this.reader != null) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.reader.close(evictOnClose);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.reader = null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<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>  /**<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * Marks the status of the file as compactedAway.<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void markCompactedAway() {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    if (this.reader != null) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.reader.markCompactedAway();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * Delete this file<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  public void deleteReader() throws IOException {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    boolean evictOnClose =<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.592"></a>
+<span class="sourceLineNo">593</span>    closeReader(evictOnClose);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    this.fs.delete(getPath(), true);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>  @Override<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  public String toString() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return this.fileInfo.toString();<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  public String toStringDetailed() {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    StringBuilder sb = new StringBuilder();<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    sb.append(this.getPath().toString());<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    sb.append(", isReference=").append(isReference());<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    if (isBulkLoadResult()) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return sb.toString();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return Whether to skip resetting the sequence id.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return false;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
 <span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    private BloomType bloomType = BloomType.NONE;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    private long maxKeyCount = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    private Path dir;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    private Path filePath;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    private InetSocketAddress[] favoredNodes;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    private HFileContext fileContext;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        FileSystem fs) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      this.conf = conf;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.cacheConf = cacheConf;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      this.fs = fs;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    }<a name="line.645"></a>
+<span class="sourceLineNo">632</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      justification="Will not overflow")<a name="line.633"></a>
+<span class="sourceLineNo">634</span>  public static class WriterBuilder {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    private final Configuration conf;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    private final CacheConfig cacheConf;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    private final FileSystem fs;<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    private BloomType bloomType = BloomType.NONE;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    private long maxKeyCount = 0;<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    private Path dir;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    private Path filePath;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    private InetSocketAddress[] favoredNodes;<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    private HFileContext fileContext;<a name="line.645"></a>
 <span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * @param dir Path to column family directory. The directory is created if<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *          does not exist. The file is given a unique name within this<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     *          directory.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     * @return this (for chained invocation)<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      Preconditions.checkNotNull(dir);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.dir = dir;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return this;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @param filePath the StoreFile path to write<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * @return this (for chained invocation)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     */<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      Preconditions.checkNotNull(filePath);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      this.filePath = filePath;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      return this;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    /**<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     * @return this (for chained invocation)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      this.favoredNodes = favoredNodes;<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      return this;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      Preconditions.checkNotNull(comparator);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      this.comparator = comparator;<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      return this;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      Preconditions.checkNotNull(bloomType);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      this.bloomType = bloomType;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      return this;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>    /**<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * @return this (for chained invocation)<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      this.maxKeyCount = maxKeyCount;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      return this;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      this.fileContext = fileContext;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      return this;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      return this;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    /**<a name="line.710"></a>
-<span class="sourceLineNo">711</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.711"></a>
-<span class="sourceLineNo">712</span>     * done. If metadata, add BEFORE closing using<a name="line.712"></a>
-<span class="sourceLineNo">713</span>     * {@link Writer#appendMetadata}.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>     */<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    public Writer build() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            "or file path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>      if (dir == null) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        dir = filePath.getParent();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>      if (!fs.exists(dir)) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        fs.mkdirs(dir);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (filePath == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        filePath = getUniqueFile(fs, dir);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        if (!BloomFilterFactory.isGeneralBloomEnabled(conf)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>          bloomType = BloomType.NONE;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">647</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        FileSystem fs) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.conf = conf;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      this.cacheConf = cacheConf;<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      this.fs = fs;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * @param dir Path to column family directory. The directory is created if<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     *          does not exist. The file is given a unique name within this<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *          directory.<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     * @return this (for chained invocation)<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      Preconditions.checkNotNull(dir);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.dir = dir;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      return this;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span>    /**<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * @param filePath the StoreFile path to write<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     * @return this (for chained invocation)<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      Preconditions.checkNotNull(filePath);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      this.filePath = filePath;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      return this;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    /**<a name="line.678"></a>
+<span class="sourceLineNo">679</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.679"></a>
+<span class="sourceLineNo">680</span>     * @return this (for chained invocation)<a name="line.680"></a>
+<span class="sourceLineNo">681</span>     */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      this.favoredNodes = favoredNodes;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      return this;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      Preconditions.checkNotNull(comparator);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      this.comparator = comparator;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      return this;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      Preconditions.checkNotNull(bloomType);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      this.bloomType = bloomType;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return this;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    /**<a name="line.699"></a>
+<span class="sourceLineNo">700</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.700"></a>
+<span class="sourceLineNo">701</span>     * @return this (for chained invocation)<a name="line.701"></a>
+<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      this.maxKeyCount = maxKeyCount;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return this;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      this.fileContext = fileContext;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      return this;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return this;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.718"></a>
+<span class="sourceLineNo">719</span>     * done. If metadata, add BEFORE closing using<a name="line.719"></a>
+<span class="sourceLineNo">720</span>     * {@link Writer#appendMetadata}.<a name="line.720"></a>
+<span class="sourceLineNo">721</span>     */<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    public Writer build() throws IOException {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.724"></a>
+<span class="sourceLineNo">725</span>            "or file path");<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (dir == null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        dir = filePath.getParent();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (!fs.exists(dir)) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        fs.mkdirs(dir);<a name="line.733"></a>
 <span class="sourceLineNo">734</span>      }<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (comparator == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        comparator = CellComparator.COMPARATOR;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      return new Writer(fs, filePath,<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          conf, cacheConf, comparator, bloomType, maxKeyCount, favoredNodes, fileContext);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  /**<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @param fs<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param dir Directory to create file in.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return random filename inside passed &lt;code&gt;dir&lt;/code&gt;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  public static Path getUniqueFile(final FileSystem fs, final Path dir)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throws IOException {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    if (!fs.getFileStatus(dir).isDirectory()) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new IOException("Expecting " + dir.toString() +<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        " to be a directory");<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return new Path(dir, UUID.randomUUID().toString().replaceAll("-", ""));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  public Long getMinimumTimestamp() {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return (getReader().timeRangeTracker == null) ?<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        null :<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        getReader().timeRangeTracker.getMinimumTimestamp();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * Gets the approximate mid-point of this file that is optimal for use in splitting it.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @param comparator Comparator used to compare KVs.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @return The split point row, or null if splitting is not possible, or reader is null.<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  @SuppressWarnings("deprecation")<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  byte[] getFileSplitPoint(CellComparator comparator) throws IOException {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    if (this.reader == null) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.warn("Storefile " + this + " Reader is null; cannot get split point");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return null;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    // Get first, last, and mid keys.  Midkey is the key that starts block<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // in middle of hfile.  Has column and timestamp.  Need to return just<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // the row we want to split on as midkey.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Cell midkey = this.reader.midkey();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    if (midkey != null) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Cell firstKey = this.reader.getFirstKey();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      Cell lastKey = this.reader.getLastKey();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      // if the midkey is the same as the first or last keys, we cannot (ever) split this region.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      if (comparator.compareRows(midkey, firstKey) == 0<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          || comparator.compareRows(midkey, lastKey) == 0) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (LOG.isDebugEnabled()) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("cannot split because midkey is the same as first or last row");<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        return null;<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return CellUtil.cloneRow(midkey);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return null;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * A StoreFile writer.  Use this to read/write HBase Store Files. It is package<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * local because it is an implementation detail of the HBase regionserver.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  public static class Writer implements Compactor.CellSink {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    private final BloomFilterWriter generalBloomFilterWriter;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    private final BloomFilterWriter deleteFamilyBloomFilterWriter;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    private final BloomType bloomType;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    private byte[] lastBloomKey;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    private int lastBloomKeyOffset, lastBloomKeyLen;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    private Cell lastCell = null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    private long earliestPutTs = HConstants.LATEST_TIMESTAMP;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    private Cell lastDeleteFamilyCell = null;<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    priva

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html
index dac2d4d..9c063a3 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tool/Canary.RegionServerTask.html
@@ -102,1116 +102,1164 @@
 <span class="sourceLineNo">094</span>public final class Canary implements Tool {<a name="line.94"></a>
 <span class="sourceLineNo">095</span>  // Sink interface used by the canary to outputs information<a name="line.95"></a>
 <span class="sourceLineNo">096</span>  public interface Sink {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  // new extended sink for output regionserver mode info<a name="line.104"></a>
-<span class="sourceLineNo">105</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public interface ExtendedSink extends Sink {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    public void publishReadFailure(String table, String server);<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void publishReadTiming(String table, String server, long msTime);<a name="line.108"></a>
-<span class="sourceLineNo">109</span>  }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>  // Simple implementation of canary sink that allows to plot on<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  // file or standard output timings or failures.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public static class StdOutSink implements Sink {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
-<span class="sourceLineNo">118</span><a name="line.118"></a>
-<span class="sourceLineNo">119</span>    @Override<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.121"></a>
-<span class="sourceLineNo">122</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.122"></a>
+<span class="sourceLineNo">097</span>    public long getReadFailureCount();<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    public long incReadFailureCount();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    public void publishReadFailure(HRegionInfo region, Exception e);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    public long getWriteFailureCount();<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    public void publishWriteFailure(HRegionInfo region, Exception e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  // new extended sink for output regionserver mode info<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  // do not change the Sink interface directly due to maintaining the API<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public interface ExtendedSink extends Sink {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    public void publishReadFailure(String table, String server);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public void publishReadTiming(String table, String server, long msTime);<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>  // Simple implementation of canary sink that allows to plot on<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  // file or standard output timings or failures.<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  public static class StdOutSink implements Sink {<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    private AtomicLong readFailureCount = new AtomicLong(0),<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        writeFailureCount = new AtomicLong(0);<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>    @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    public long getReadFailureCount() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      return readFailureCount.get();<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>    @Override<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.127"></a>
-<span class="sourceLineNo">128</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span><a name="line.130"></a>
-<span class="sourceLineNo">131</span>    @Override<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    public void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<a name="line.133"></a>
+<span class="sourceLineNo">126</span>    public long incReadFailureCount() {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      return readFailureCount.incrementAndGet();<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span><a name="line.129"></a>
+<span class="sourceLineNo">130</span>    @Override<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    public void publishReadFailure(HRegionInfo region, Exception e) {<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      readFailureCount.incrementAndGet();<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      LOG.error(String.format("read from region %s failed", region.getRegionNameAsString()), e);<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>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>    @Override<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 ExtendedSink implementation<a name="line.148"></a>
-<span class="sourceLineNo">149</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.149"></a>
-<span class="sourceLineNo">150</span><a name="line.150"></a>
-<span class="sourceLineNo">151</span>    @Override<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public void publishReadFailure(String table, String server) {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.158"></a>
-<span class="sourceLineNo">159</span>          table, server, msTime));<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   * failure.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    public enum TaskType{<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      READ, WRITE<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    private Connection connection;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    private HRegionInfo region;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private Sink sink;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    private TaskType taskType;<a name="line.174"></a>
+<span class="sourceLineNo">137</span>    public void publishReadFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      readFailureCount.incrementAndGet();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      LOG.error(String.format("read from region %s column family %s failed",<a name="line.139"></a>
+<span class="sourceLineNo">140</span>                region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    public void publishReadTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      LOG.info(String.format("read from region %s column family %s in %dms",<a name="line.145"></a>
+<span class="sourceLineNo">146</span>               region.getRegionNameAsString(), column.getNameAsString(), msTime));<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 long getWriteFailureCount() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return writeFailureCount.get();<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 void publishWriteFailure(HRegionInfo region, Exception e) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      writeFailureCount.incrementAndGet();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      LOG.error(String.format("write to region %s failed", region.getRegionNameAsString()), e);<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 void publishWriteFailure(HRegionInfo region, HColumnDescriptor column, Exception e) {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      writeFailureCount.incrementAndGet();<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error(String.format("write to region %s column family %s failed",<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        region.getRegionNameAsString(), column.getNameAsString()), e);<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>    @Override<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    public void publishWriteTiming(HRegionInfo region, HColumnDescriptor column, long msTime) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      LOG.info(String.format("write to region %s column family %s in %dms",<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        region.getRegionNameAsString(), column.getNameAsString(), msTime));<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>  // a ExtendedSink implementation<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  public static class RegionServerStdOutSink extends StdOutSink implements ExtendedSink {<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      this.connection = connection;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      this.region = region;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      this.sink = sink;<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      this.taskType = taskType;<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>    @Override<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    public Void call() {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      switch (taskType) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      case READ:<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        return read();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      case WRITE:<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        return write();<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      default:<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        return read();<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>    public Void read() {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      Table table = null;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      HTableDescriptor tableDesc = null;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      try {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        if (LOG.isDebugEnabled()) {<a name="line.199"></a>
-<span class="sourceLineNo">200</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.200"></a>
-<span class="sourceLineNo">201</span>            region.getTable()));<a name="line.201"></a>
-<span class="sourceLineNo">202</span>        }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        table = connection.getTable(region.getTable());<a name="line.203"></a>
-<span class="sourceLineNo">204</span>        tableDesc = table.getTableDescriptor();<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      } catch (IOException e) {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        LOG.debug("sniffRegion failed", e);<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        sink.publishReadFailure(region, e);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>        if (table != null) {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          try {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>            table.close();<a name="line.210"></a>
-<span class="sourceLineNo">211</span>          } catch (IOException ioe) {<a name="line.211"></a>
-<span class="sourceLineNo">212</span>            LOG.error("Close table failed", e);<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>        return null;<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>      byte[] startKey = null;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      Get get = null;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      Scan scan = null;<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      ResultScanner rs = null;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      StopWatch stopWatch = new StopWatch();<a name="line.222"></a>
-<span class="sourceLineNo">223</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        stopWatch.reset();<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        startKey = region.getStartKey();<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.226"></a>
-<span class="sourceLineNo">227</span>        if (startKey.length &gt; 0) {<a name="line.227"></a>
-<span class="sourceLineNo">228</span>          get = new Get(startKey);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>          get.setCacheBlocks(false);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.230"></a>
-<span class="sourceLineNo">231</span>          get.addFamily(column.getName());<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        } else {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          scan = new Scan();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>          scan.setRaw(true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          scan.setCaching(1);<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          scan.setCacheBlocks(false);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.237"></a>
-<span class="sourceLineNo">238</span>          scan.addFamily(column.getName());<a name="line.238"></a>
-<span class="sourceLineNo">239</span>          scan.setMaxResultSize(1L);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>          scan.setSmall(true);<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>        if (LOG.isDebugEnabled()) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.244"></a>
-<span class="sourceLineNo">245</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.245"></a>
-<span class="sourceLineNo">246</span>            Bytes.toStringBinary(startKey)));<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        }<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        try {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>          stopWatch.start();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          if (startKey.length &gt; 0) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>            table.get(get);<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          } else {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>            rs = table.getScanner(scan);<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            rs.next();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          }<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          stopWatch.stop();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        } catch (Exception e) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          sink.publishReadFailure(region, column, e);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        } finally {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          if (rs != null) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>            rs.close();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>          }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          scan = null;<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          get = null;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>          startKey = null;<a name="line.266"></a>
+<span class="sourceLineNo">176</span>    @Override<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    public void publishReadFailure(String table, String server) {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      incReadFailureCount();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      LOG.error(String.format("Read from table:%s on region server:%s", table, server));<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>    @Override<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    public void publishReadTiming(String table, String server, long msTime) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      LOG.info(String.format("Read from table:%s on region server:%s in %dms",<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          table, server, msTime));<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>  /**<a name="line.189"></a>
+<span class="sourceLineNo">190</span>   * For each column family of the region tries to get one row and outputs the latency, or the<a name="line.190"></a>
+<span class="sourceLineNo">191</span>   * failure.<a name="line.191"></a>
+<span class="sourceLineNo">192</span>   */<a name="line.192"></a>
+<span class="sourceLineNo">193</span>  static class RegionTask implements Callable&lt;Void&gt; {<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    public enum TaskType{<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      READ, WRITE<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    }<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    private Connection connection;<a name="line.197"></a>
+<span class="sourceLineNo">198</span>    private HRegionInfo region;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    private Sink sink;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>    private TaskType taskType;<a name="line.200"></a>
+<span class="sourceLineNo">201</span><a name="line.201"></a>
+<span class="sourceLineNo">202</span>    RegionTask(Connection connection, HRegionInfo region, Sink sink, TaskType taskType) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      this.connection = connection;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      this.region = region;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      this.sink = sink;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      this.taskType = taskType;<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>    @Override<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    public Void call() {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      switch (taskType) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      case READ:<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        return read();<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      case WRITE:<a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return write();<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      default:<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        return read();<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><a name="line.220"></a>
+<span class="sourceLineNo">221</span>    public Void read() {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      Table table = null;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>      HTableDescriptor tableDesc = null;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      try {<a name="line.224"></a>
+<span class="sourceLineNo">225</span>        if (LOG.isDebugEnabled()) {<a name="line.225"></a>
+<span class="sourceLineNo">226</span>          LOG.debug(String.format("reading table descriptor for table %s",<a name="line.226"></a>
+<span class="sourceLineNo">227</span>            region.getTable()));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>        }<a name="line.228"></a>
+<span class="sourceLineNo">229</span>        table = connection.getTable(region.getTable());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>        tableDesc = table.getTableDescriptor();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>      } catch (IOException e) {<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        LOG.debug("sniffRegion failed", e);<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        sink.publishReadFailure(region, e);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        if (table != null) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          try {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>            table.close();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          } catch (IOException ioe) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>            LOG.error("Close table failed", e);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>          }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>        }<a name="line.240"></a>
+<span class="sourceLineNo">241</span>        return null;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>      byte[] startKey = null;<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      Get get = null;<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      Scan scan = null;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      ResultScanner rs = null;<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      StopWatch stopWatch = new StopWatch();<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>        stopWatch.reset();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        startKey = region.getStartKey();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (startKey.length &gt; 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          get = new Get(startKey);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          get.setCacheBlocks(false);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          get.addFamily(column.getName());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          scan = new Scan();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          scan.setRaw(true);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          scan.setCaching(1);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          scan.setCacheBlocks(false);<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.263"></a>
+<span class="sourceLineNo">264</span>          scan.addFamily(column.getName());<a name="line.264"></a>
+<span class="sourceLineNo">265</span>          scan.setMaxResultSize(1L);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>          scan.setSmall(true);<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>      try {<a name="line.269"></a>
-<span class="sourceLineNo">270</span>        table.close();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>      } catch (IOException e) {<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        LOG.error("Close table failed", e);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      }<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<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>    /**<a name="line.277"></a>
-<span class="sourceLineNo">278</span>     * Check writes for the canary table<a name="line.278"></a>
-<span class="sourceLineNo">279</span>     * @return<a name="line.279"></a>
-<span class="sourceLineNo">280</span>     */<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    private Void write() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      Table table = null;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      HTableDescriptor tableDesc = null;<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      try {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        table = connection.getTable(region.getTable());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        tableDesc = table.getTableDescriptor();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        byte[] rowToCheck = region.getStartKey();<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        if (rowToCheck.length == 0) {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          rowToCheck = new byte[]{0x0};<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        }<a name="line.290"></a>
-<span class="sourceLineNo">291</span>        int writeValueSize =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.293"></a>
-<span class="sourceLineNo">294</span>          Put put = new Put(rowToCheck);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          byte[] value = new byte[writeValueSize];<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          Bytes.random(value);<a name="line.296"></a>
-<span class="sourceLineNo">297</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>          if (LOG.isDebugEnabled()) {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.300"></a>
-<span class="sourceLineNo">301</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.301"></a>
-<span class="sourceLineNo">302</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.302"></a>
-<span class="sourceLineNo">303</span>          }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>          try {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>            long startTime = System.currentTimeMillis();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            table.put(put);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            long time = System.currentTimeMillis() - startTime;<a name="line.307"></a>
-<span class="sourceLineNo">308</span>            sink.publishWriteTiming(region, column, time);<a name="line.308"></a>
-<span class="sourceLineNo">309</span>          } catch (Exception e) {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      } catch (IOException e) {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>        sink.publishWriteFailure(region, e);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>      }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      return null;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    }<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   */<a name="line.323"></a>
-<span class="sourceLineNo">324</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    private Connection connection;<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    private String serverName;<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    private HRegionInfo region;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    private ExtendedSink sink;<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    private AtomicLong successes;<a name="line.329"></a>
-<span class="sourceLineNo">330</span><a name="line.330"></a>
-<span class="sourceLineNo">331</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      this.connection = connection;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      this.serverName = serverName;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      this.region = region;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      this.sink = sink;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      this.successes = successes;<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>    @Override<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    public Void call() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>      TableName tableName = null;<a name="line.342"></a>
-<span class="sourceLineNo">343</span>      Table table = null;<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      Get get = null;<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      byte[] startKey = null;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      Scan scan = null;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      StopWatch stopWatch = new StopWatch();<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      // monitor one region on every region server<a name="line.348"></a>
-<span class="sourceLineNo">349</span>      stopWatch.reset();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
-<span class="sourceLineNo">351</span>        tableName = region.getTable();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        table = connection.getTable(tableName);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>        startKey = region.getStartKey();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        if (LOG.isDebugEnabled()) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.356"></a>
-<span class="sourceLineNo">357</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.357"></a>
-<span class="sourceLineNo">358</span>            Bytes.toStringBinary(startKey)));<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>        if (startKey.length &gt; 0) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>          get = new Get(startKey);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>          get.setCacheBlocks(false);<a name="line.362"></a>
-<span class="sourceLineNo">363</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.363"></a>
-<span class="sourceLineNo">364</span>          stopWatch.start();<a name="line.364"></a>
-<span class="sourceLineNo">365</span>          table.get(get);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>          stopWatch.stop();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>        } else {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>          scan = new Scan();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>          scan.setCacheBlocks(false);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.370"></a>
-<span class="sourceLineNo">371</span>          scan.setCaching(1);<a name="line.371"></a>
-<span class="sourceLineNo">372</span>          scan.setMaxResultSize(1L);<a name="line.372"></a>
-<span class="sourceLineNo">373</span>          scan.setSmall(true);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>          stopWatch.start();<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          ResultScanner s = table.getScanner(scan);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>          s.next();<a name="line.376"></a>
-<span class="sourceLineNo">377</span>          s.close();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>          stopWatch.stop();<a name="line.378"></a>
-<span class="sourceLineNo">379</span>        }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        successes.incrementAndGet();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      } catch (TableNotFoundException tnfe) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        LOG.error("Table may be deleted", tnfe);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.384"></a>
-<span class="sourceLineNo">385</span>      } catch (TableNotEnabledException tnee) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        // This is considered a success since we got a response.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>        successes.incrementAndGet();<a name="line.387"></a>
-<span class="sourceLineNo">388</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        LOG.error(dnrioe);<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      } catch (IOException e) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        LOG.error(e);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } finally {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (table != null) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          try {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>            table.close();<a name="line.398"></a>
-<span class="sourceLineNo">399</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.399"></a>
-<span class="sourceLineNo">400</span>            LOG.error("Close table failed", e);<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>        scan = null;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        get = null;<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        startKey = null;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return null;<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>  private static final int USAGE_EXIT_CODE = 1;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.412"></a>
-<span class="sourceLineNo">413</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.416"></a>
-<span class="sourceLineNo">417</span><a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.418"></a>
-<span class="sourceLineNo">419</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.419"></a>
-<span class="sourceLineNo">420</span><a name="line.420"></a>
-<span class="sourceLineNo">421</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  private Configuration conf = null;<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private long interval = 0;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>  private Sink sink = null;<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>  private boolean useRegExp;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private boolean failOnError = true;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>  private boolean regionServerMode = false;<a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private boolean regionServerAllRegions = false;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>  private boolean writeSniffing = false;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.440"></a>
-<span class="sourceLineNo">441</span><a name="line.441"></a>
-<span class="sourceLineNo">442</span>  public Canary() {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>  public Canary(ExecutorService executor, Sink sink) {<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    this.executor = executor;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    this.sink = sink;<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  }<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Override<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public Configuration getConf() {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    return conf;<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>  @Override<a name="line.456"></a>
-<span class="sourceLineNo">457</span>  public void setConf(Configuration conf) {<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    this.conf = conf;<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>  private int parseArgs(String[] args) {<a name="line.461"></a>
-<span class="sourceLineNo">462</span>    int index = -1;<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    // Process command line args<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    for (int i = 0; i &lt; args.length; i++) {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      String cmd = args[i];<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>      if (cmd.startsWith("-")) {<a name="line.467"></a>
-<span class="sourceLineNo">468</span>        if (index &gt;= 0) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>          // command line args must be in the form: [opts] [table 1 [table 2 ...]]<a name="line.469"></a>
-<span class="sourceLineNo">470</span>          System.err.println("Invalid command line options");<a name="line.470"></a>
-<span class="sourceLineNo">471</span>          printUsageAndExit();<a name="line.471"></a>
-<span class="sourceLineNo">472</span>        }<a name="line.472"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>        if (LOG.isDebugEnabled()) {<a name="line.269"></a>
+<span class="sourceLineNo">270</span>          LOG.debug(String.format("reading from table %s region %s column family %s and key %s",<a name="line.270"></a>
+<span class="sourceLineNo">271</span>            tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.271"></a>
+<span class="sourceLineNo">272</span>            Bytes.toStringBinary(startKey)));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>        }<a name="line.273"></a>
+<span class="sourceLineNo">274</span>        try {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>          stopWatch.start();<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          if (startKey.length &gt; 0) {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>            table.get(get);<a name="line.277"></a>
+<span class="sourceLineNo">278</span>          } else {<a name="line.278"></a>
+<span class="sourceLineNo">279</span>            rs = table.getScanner(scan);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>            rs.next();<a name="line.280"></a>
+<span class="sourceLineNo">281</span>          }<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          stopWatch.stop();<a name="line.282"></a>
+<span class="sourceLineNo">283</span>          sink.publishReadTiming(region, column, stopWatch.getTime());<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        } catch (Exception e) {<a name="line.284"></a>
+<span class="sourceLineNo">285</span>          sink.publishReadFailure(region, column, e);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        } finally {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>          if (rs != null) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>            rs.close();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>          }<a name="line.289"></a>
+<span class="sourceLineNo">290</span>          scan = null;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>          get = null;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>          startKey = null;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      }<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      try {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>        table.close();<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      } catch (IOException e) {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>        LOG.error("Close table failed", e);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>      }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>      return null;<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>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * Check writes for the canary table<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     * @return<a name="line.305"></a>
+<span class="sourceLineNo">306</span>     */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    private Void write() {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      Table table = null;<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      HTableDescriptor tableDesc = null;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      try {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        table = connection.getTable(region.getTable());<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        tableDesc = table.getTableDescriptor();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        byte[] rowToCheck = region.getStartKey();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        if (rowToCheck.length == 0) {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>          rowToCheck = new byte[]{0x0};<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        }<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        int writeValueSize =<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            connection.getConfiguration().getInt(HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY, 10);<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        for (HColumnDescriptor column : tableDesc.getColumnFamilies()) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          Put put = new Put(rowToCheck);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>          byte[] value = new byte[writeValueSize];<a name="line.321"></a>
+<span class="sourceLineNo">322</span>          Bytes.random(value);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>          put.addColumn(column.getName(), HConstants.EMPTY_BYTE_ARRAY, value);<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>          if (LOG.isDebugEnabled()) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>            LOG.debug(String.format("writing to table %s region %s column family %s and key %s",<a name="line.326"></a>
+<span class="sourceLineNo">327</span>              tableDesc.getTableName(), region.getRegionNameAsString(), column.getNameAsString(),<a name="line.327"></a>
+<span class="sourceLineNo">328</span>              Bytes.toStringBinary(rowToCheck)));<a name="line.328"></a>
+<span class="sourceLineNo">329</span>          }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>          try {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>            long startTime = System.currentTimeMillis();<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            table.put(put);<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            long time = System.currentTimeMillis() - startTime;<a name="line.333"></a>
+<span class="sourceLineNo">334</span>            sink.publishWriteTiming(region, column, time);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>          } catch (Exception e) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>            sink.publishWriteFailure(region, column, e);<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>        table.close();<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      } catch (IOException e) {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        sink.publishWriteFailure(region, e);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      }<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      return null;<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><a name="line.346"></a>
+<span class="sourceLineNo">347</span>  /**<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * Get one row from a region on the regionserver and outputs the latency, or the failure.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  static class RegionServerTask implements Callable&lt;Void&gt; {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    private Connection connection;<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    private String serverName;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    private HRegionInfo region;<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    private ExtendedSink sink;<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    private AtomicLong successes;<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    RegionServerTask(Connection connection, String serverName, HRegionInfo region,<a name="line.357"></a>
+<span class="sourceLineNo">358</span>        ExtendedSink sink, AtomicLong successes) {<a name="line.358"></a>
+<span class="sourceLineNo">359</span>      this.connection = connection;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      this.serverName = serverName;<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      this.region = region;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>      this.sink = sink;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      this.successes = successes;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
+<span class="sourceLineNo">365</span><a name="line.365"></a>
+<span class="sourceLineNo">366</span>    @Override<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    public Void call() {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      TableName tableName = null;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      Table table = null;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>      Get get = null;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      byte[] startKey = null;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      Scan scan = null;<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      StopWatch stopWatch = new StopWatch();<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // monitor one region on every region server<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      stopWatch.reset();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      try {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>        tableName = region.getTable();<a name="line.377"></a>
+<span class="sourceLineNo">378</span>        table = connection.getTable(tableName);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        startKey = region.getStartKey();<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        // Can't do a get on empty start row so do a Scan of first element if any instead.<a name="line.380"></a>
+<span class="sourceLineNo">381</span>        if (LOG.isDebugEnabled()) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>          LOG.debug(String.format("reading from region server %s table %s region %s and key %s",<a name="line.382"></a>
+<span class="sourceLineNo">383</span>            serverName, region.getTable(), region.getRegionNameAsString(),<a name="line.383"></a>
+<span class="sourceLineNo">384</span>            Bytes.toStringBinary(startKey)));<a name="line.384"></a>
+<span class="sourceLineNo">385</span>        }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>        if (startKey.length &gt; 0) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          get = new Get(startKey);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          get.setCacheBlocks(false);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>          get.setFilter(new FirstKeyOnlyFilter());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>          stopWatch.start();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          table.get(get);<a name="line.391"></a>
+<span class="sourceLineNo">392</span>          stopWatch.stop();<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        } else {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>          scan = new Scan();<a name="line.394"></a>
+<span class="sourceLineNo">395</span>          scan.setCacheBlocks(false);<a name="line.395"></a>
+<span class="sourceLineNo">396</span>          scan.setFilter(new FirstKeyOnlyFilter());<a name="line.396"></a>
+<span class="sourceLineNo">397</span>          scan.setCaching(1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>          scan.setMaxResultSize(1L);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>          scan.setSmall(true);<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          stopWatch.start();<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          ResultScanner s = table.getScanner(scan);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>          s.next();<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          s.close();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>          stopWatch.stop();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        }<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        successes.incrementAndGet();<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        sink.publishReadTiming(tableName.getNameAsString(), serverName, stopWatch.getTime());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } catch (TableNotFoundException tnfe) {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.error("Table may be deleted", tnfe);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        // This is ignored because it doesn't imply that the regionserver is dead<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      } catch (TableNotEnabledException tnee) {<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        // This is considered a success since we got a response.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>        successes.incrementAndGet();<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        LOG.debug("The targeted table was disabled.  Assuming success.");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      } catch (DoNotRetryIOException dnrioe) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        LOG.error(dnrioe);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      } catch (IOException e) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        sink.publishReadFailure(tableName.getNameAsString(), serverName);<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        LOG.error(e);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      } finally {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>        if (table != null) {<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          try {<a name="line.423"></a>
+<span class="sourceLineNo">424</span>            table.close();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          } catch (IOException e) {/* DO NOTHING */<a name="line.425"></a>
+<span class="sourceLineNo">426</span>            LOG.error("Close table failed", e);<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
+<span class="sourceLineNo">429</span>        scan = null;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>        get = null;<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        startKey = null;<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
+<span class="sourceLineNo">433</span>      return null;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>  }<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private static final int USAGE_EXIT_CODE = 1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>  private static final int INIT_ERROR_EXIT_CODE = 2;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private static final int TIMEOUT_ERROR_EXIT_CODE = 3;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>  private static final int ERROR_EXIT_CODE = 4;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>  private static final int FAILURE_EXIT_CODE = 5;<a name="line.441"></a>
+<span class="sourceLineNo">442</span><a name="line.442"></a>
+<span class="sourceLineNo">443</span>  private static final long DEFAULT_INTERVAL = 6000;<a name="line.443"></a>
+<span class="sourceLineNo">444</span><a name="line.444"></a>
+<span class="sourceLineNo">445</span>  private static final long DEFAULT_TIMEOUT = 600000; // 10 mins<a name="line.445"></a>
+<span class="sourceLineNo">446</span>  private static final int MAX_THREADS_NUM = 16; // #threads to contact regions<a name="line.446"></a>
+<span class="sourceLineNo">447</span><a name="line.447"></a>
+<span class="sourceLineNo">448</span>  private static final Log LOG = LogFactory.getLog(Canary.class);<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>  public static final TableName DEFAULT_WRITE_TABLE_NAME = TableName.valueOf(<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    NamespaceDescriptor.SYSTEM_NAMESPACE_NAME_STR, "canary");<a name="line.451"></a>
+<span class="sourceLineNo">452</span><a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private static final String CANARY_TABLE_FAMILY_NAME = "Test";<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Configuration conf = null;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>  private long interval = 0;<a name="line.456"></a>
+<span class="sourceLineNo">457</span>  private Sink sink = null;<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>  private boolean useRegExp;<a name="line.459"></a>
+<span class="sourceLineNo">460</span>  private long timeout = DEFAULT_TIMEOUT;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>  private boolean failOnError = true;<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  private boolean regionServerMode = false;<a name="line.462"></a>
+<span class="sourceLineNo">463</span>  private boolean regionServerAllRegions = false;<a name="line.463"></a>
+<span class="sourceLineNo">464</span>  private boolean writeSniffing = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  private boolean treatFailureAsError = false;<a name="line.465"></a>
+<span class="sourceLineNo">466</span>  private TableName writeTableName = DEFAULT_WRITE_TABLE_NAME;<a name="line.466"></a>
+<span class="sourceLineNo">467</span><a name="line.467"></a>
+<span class="sourceLineNo">468</span>  private ExecutorService executor; // threads to retrieve data from regionservers<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>  public Canary() {<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    this(new ScheduledThreadPoolExecutor(1), new RegionServerStdOutSink());<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>        if (cmd.equals("-help")) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>          // user asked for help, print the help and quit.<a name="line.475"></a>
-<span class="sourceLineNo">476</span>          printUsageAndExit();<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        } else if (cmd.equals("-daemon") &amp;&amp; interval == 0) {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>          // user asked for daemon mode, set a default interval between checks<a name="line.478"></a>
-<span class="sourceLineNo">479</span>          interval = DEFAULT_INTERVAL;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>        } else if (cmd.equals("-interval")) {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>          // user has specified an interval for canary breaths (-interval N)<a name="line.481"></a>
-<span class="sourceLineNo">482</span>          i++;<a name="line.482"></a>
+<span class="sourceLineNo">474</span>  public Canary(ExecutorService executor, Sink sink) {<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    this.executor = executor;<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    this.sink = sink;<a name="line.476"></a>
+<span class="sourceLineNo">477</span>  }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>  @Override<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  public Configuration getConf() {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    return conf;<a name="line.481"></a>
+<span class="sourceLineNo">482</span>  }<a name="line.482"></a>
 <span class="sourceLineNo">483</span><a name="line.483"></a>
-<span class="sourceLineNo">484</span>          if (i == args.length) {<a name="line.484"></a>
-<span class="sourceLineNo">485</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.485"></a>
-<span class="sourceLineNo">486</span>            printUsageAndExit();<a name="line.486"></a>
-<span class="sourceLineNo">487</span>          }<a name="line.487"></a>
+<span class="sourceLineNo">484</span>  @Override<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  public void setConf(Configuration conf) {<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    this.conf = conf;<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>          try {<a name="line.489"></a>
-<span class="sourceLineNo">490</span>            interval = Long.parseLong(args[i]) * 1000;<a name="line.490"></a>
-<span class="sourceLineNo">491</span>          } catch (NumberFormatException e) {<a name="line.491"></a>
-<span class="sourceLineNo">492</span>            System.err.println("-interval needs a numeric value argument.");<a name="line.492"></a>
-<span class="sourceLineNo">493</span>            printUsageAndExit();<a name="line.493"></a>
-<span class="sourceLineNo">494</span>          }<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        } else if(cmd.equals("-regionserver")) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          this.regionServerMode = true;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>        } else if(cmd.equals("-allRegions")) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>          this.regionServerAllRegions = true;<a name="line.498"></a>
-<span class="sourceLineNo">499</span>        } else if(cmd.equals("-writeSniffing")) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          this.writeSniffing = true;<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        } else if (cmd.equals("-e")) {<a name="line.501"></a>
-<span class="sourceLineNo">502</span>          this.useRegExp = true;<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        } else if (cmd.equals("-t")) {<a name="line.503"></a>
-<span class="sourceLineNo">504</span>          i++;<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>          if (i == args.length) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>            System.err.println("-t needs a numeric value argument.");<a name="line.507"></a>
-<span class="sourceLineNo">508</span>            printUsageAndExit();<a name="line.508"></a>
-<span class="sourceLineNo">509</span>          }<a name="line.509"></a>
-<span class="sourceLineNo">510</span><a name="line.510"></a>
-<span class="sourceLineNo">511</span>          try {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>            this.timeout = Long.parseLong(args[i]);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>          } catch (NumberFormatException e) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>            System.err.println("-t needs a numeric value argument.");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>            printUsageAndExit();<a name="line.515"></a>
-<span class="sourceLineNo">516</span>          }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        } else if (cmd.equals("-writeTable")) {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          i++;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>          if (i == args.length) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>            System.err.println("-writeTable needs a string value argument.");<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            printUsageAndExit();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>          }<a name="line.523"></a>
-<span class="sourceLineNo">524</span>          this.writeTableName = TableName.valueOf(args[i]);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        } else if (cmd.equals("-f")) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          i++;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>          if (i == args.length) {<a name="line.528"></a>
-<span class="sourceLineNo">529</span>            System.err<a name="line.529"></a>
-<span class="sourceLineNo">530</span>                .println("-f needs a boolean value argument (true|false).");<a name="line.530"></a>
-<span class="sourceLineNo">531</span>            printUsageAndExit();<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>          this.failOnError = Boolean.parseBoolean(args[i]);<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        } else {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          // no options match<a name="line.536"></a>
-<span class="sourceLineNo">537</span>          System.err.println(cmd + " options is invalid.");<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          printUsageAndExit();<a name="line.538"></a>
-<span class="sourceLineNo">539</span>        }<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      } else if (index &lt; 0) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        // keep track of first table name specified by the user<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        index = i;<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 (this.regionServerAllRegions &amp;&amp; !this.regionServerMode) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>      System.err.println("-allRegions can only be specified in regionserver mode.");<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      printUsageAndExit();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    return index;<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>  @Override<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  public int run(String[] args) throws Exception {<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    int index = parseArgs(args);<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    ChoreService choreService = null;<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // Launches chore for refreshing kerberos credentials if security is enabled.<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // Please see http://hbase.apache.org/book.html#_running_canary_in_a_kerberos_enabled_cluster<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // for more details.<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    final ScheduledChore authChore = AuthUtil.getAuthChore(conf);<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    if (authChore != null) {<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      choreService = new ChoreService("CANARY_TOOL");<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      choreService.scheduleChore(authChore);<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    }<a name="line.564"></a>
-<span class="sourceLineNo">565</span><a name="line.565"></a>
-<span class="sourceLineNo">566</span>    // Start to prepare the stuffs<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    Monitor monitor = null;<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    Thread monitorThread = null;<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    long startTime = 0;<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    long currentTimeLength = 0;<a name="line.570"></a>
-<span class="sourceLineNo">571</span>    // Get a connection to use in below.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    try (Connection connection = ConnectionFactory.createConnection(this.conf)) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      do {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>        // Do monitor !!<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        try {<a name="line.575"></a>
-<span class="sourceLineNo">576</span>          monitor = this.newMonitor(connection, index, args);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>          monitorThread = new Thread(monitor);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>          startTime = System.currentTimeMillis();<a name="line.578"></a>
-<span class="sourceLineNo">579</span>          monitorThread.start();<a name="line.579"></a>
-<span class="sourceLineNo">580</span>          while (!monitor.isDone()) {<a name="line.580"></a>
-<span class="sourceLineNo">581</span>            // wait for 1 sec<a name="line.581"></a>
-<span class="sourceLineNo">582</span>            Thread.sleep(1000);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>            // exit if any error occurs<a name="line.583"></a>
-<span class="sourceLineNo">584</span>            if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>              monitorThread.interrupt();<a name="line.585"></a>
-<span class="sourceLineNo">586</span>              if (monitor.initialized) {<a name="line.586"></a>
-<span class="sourceLineNo">587</span>                return monitor.errorCode;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>              } else {<a name="line.588"></a>
-<span class="sourceLineNo">589</span>                return INIT_ERROR_EXIT_CODE;<a name="line.589"></a>
-<span class="sourceLineNo">590</span>              }<a name="line.590"></a>
-<span class="sourceLineNo">591</span>            }<a name="line.591"></a>
-<span class="sourceLineNo">592</span>            currentTimeLength = System.currentTimeMillis() - startTime;<a name="line.592"></a>
-<span class="sourceLineNo">593</span>            if (currentTimeLength &gt; this.timeout) {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>              LOG.error("The monitor is running too long (" + currentTimeLength<a name="line.594"></a>
-<span class="sourceLineNo">595</span>                  + ") after timeout limit:" + this.timeout<a name="line.595"></a>
-<span class="sourceLineNo">596</span>                  + " will be killed itself !!");<a name="line.596"></a>
-<span class="sourceLineNo">597</span>              if (monitor.initialized) {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>                return TIMEOUT_ERROR_EXIT_CODE;<a name="line.598"></a>
-<span class="sourceLineNo">599</span>              } else {<a name="line.599"></a>
-<span class="sourceLineNo">600</span>                return INIT_ERROR_EXIT_CODE;<a name="line.600"></a>
-<span class="sourceLineNo">601</span>              }<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            }<a name="line.602"></a>
-<span class="sourceLineNo">603</span>          }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>          if (this.failOnError &amp;&amp; monitor.hasError()) {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>            monitorThread.interrupt();<a name="line.606"></a>
-<span class="sourceLineNo">607</span>            return monitor.errorCode;<a name="line.607"></a>
-<span class="sourceLineNo">608</span>          }<a name="line.608"></a>
-<span class="sourceLineNo">609</span>        } finally {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          if (monitor != null) monitor.close();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>        Thread.sleep(interval);<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      } while (interval &gt; 0);<a name="line.614"></a>
-<span class="sourceLineNo">615</span>    } // try-with-resources close<a name="line.615"></a>
-<span class="sourceLineNo">616</span><a name="line.616"></a>
-<span class="sourceLineNo">617</span>    if (choreService != null) {<a name="line.617"></a>
-<span class="sourceLineNo">618</span>      choreService.shutdown();<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    }<a name="line.619"></a>
-<span class="sourceLineNo">620</span>    return monitor.errorCode;<a name="line.620"></a>
-<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
-<span class="sourceLineNo">622</span><a name="line.622"></a>
-<span class="sourceLineNo">623</span>  private void printUsageAndExit() {<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    System.err.printf(<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      "Usage: bin/hbase %s [opts] [table1 [table2]...] | [regionserver1 [regionserver2]..]%n",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>        getClass().getName());<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    System.err.println(" where [opts] are:");<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    System.err.println("   -help          Show this help and exit.");<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    System.err.println("   -regionserver  replace the table argument to regionserver,");<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    System.err.println("      which means to enable regionserver mode");<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    System.err.println("   -allRegions    Tries all regions on a regionserver,");<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    System.err.println("      only works in regionserver mode.");<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    System.err.println("   -daemon        Continuous check at defined intervals.");<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    System.err.println("   -interval &lt;N&gt;  Interval between checks (sec)");<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    System.err.println("   -e          

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html
index 0cc571b..f0d9e09 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/StoreFile.Comparators.GetBulkTime.html
@@ -299,1507 +299,1514 @@
 <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>  /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   * @return True if this file was made by a major compaction.<a name="line.294"></a>
+<span class="sourceLineNo">294</span>   * @return True if this is HFile.<a name="line.294"></a>
 <span class="sourceLineNo">295</span>   */<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public boolean isMajorCompaction() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    if (this.majorCompaction == null) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      throw new NullPointerException("This has not been set yet");<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.majorCompaction.get();<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>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return True if this file should not be part of a minor compaction.<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public boolean excludeFromMinorCompaction() {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    return this.excludeFromMinorCompaction;<a name="line.307"></a>
+<span class="sourceLineNo">296</span>  public boolean isHFile() {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    return this.fileInfo.isHFile(this.fileInfo.getPath());<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  }<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>   * @return True if this file was made by a major compaction.<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   */<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public boolean isMajorCompaction() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    if (this.majorCompaction == null) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>      throw new NullPointerException("This has not been set yet");<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    }<a name="line.306"></a>
+<span class="sourceLineNo">307</span>    return this.majorCompaction.get();<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>  /**<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   * @return This files maximum edit sequence id.<a name="line.311"></a>
+<span class="sourceLineNo">311</span>   * @return True if this file should not be part of a minor compaction.<a name="line.311"></a>
 <span class="sourceLineNo">312</span>   */<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  public long getMaxSequenceId() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return this.sequenceid;<a name="line.314"></a>
+<span class="sourceLineNo">313</span>  public boolean excludeFromMinorCompaction() {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    return this.excludeFromMinorCompaction;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * Only used by the Striped Compaction Policy<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * @param key<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * @return value associated with the metadata key<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   */<a name="line.325"></a>
-<span class="sourceLineNo">326</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    return metadataMap.get(key);<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>  /**<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * Return the largest memstoreTS found across all storefiles in<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * the given list. Store files that were created by a mapreduce<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * does not yet have any store files.<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    long max = 0;<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    for (StoreFile sf : sfs) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (!sf.isBulkLoadResult()) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        max = Math.max(max, sf.getMaxMemstoreTS());<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>    return max;<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>   * Return the highest sequence ID found across all storefiles in<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   * the given list.<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * @param sfs<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   * does not yet have any store files.<a name="line.353"></a>
-<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    long max = 0;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    for (StoreFile sf : sfs) {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return max;<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>  /**<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * Check if this storefile was created by bulk load.<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.365"></a>
-<span class="sourceLineNo">366</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * explicitly turned off.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @return true if this storefile was created by bulk load.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   */<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  boolean isBulkLoadResult() {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    boolean bulkLoadedHFile = false;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    String fileName = this.getPath().getName();<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (startPos != -1) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      bulkLoadedHFile = true;<a name="line.378"></a>
-<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  }<a name="line.381"></a>
-<span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>  @VisibleForTesting<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  public boolean isCompactedAway() {<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    if (this.reader != null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>      return this.reader.isCompactedAway();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    return true;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  }<a name="line.389"></a>
-<span class="sourceLineNo">390</span><a name="line.390"></a>
-<span class="sourceLineNo">391</span>  @VisibleForTesting<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  public int getRefCount() {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>    return this.reader.refCount.get();<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>  /**<a name="line.396"></a>
-<span class="sourceLineNo">397</span>   * Return the timestamp at which this bulk load file was generated.<a name="line.397"></a>
-<span class="sourceLineNo">398</span>   */<a name="line.398"></a>
-<span class="sourceLineNo">399</span>  public long getBulkLoadTimestamp() {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   * calculated when store file is opened.<a name="line.406"></a>
-<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
-<span class="sourceLineNo">408</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    return this.fileInfo.getHDFSBlockDistribution();<a name="line.409"></a>
-<span class="sourceLineNo">410</span>  }<a name="line.410"></a>
-<span class="sourceLineNo">411</span><a name="line.411"></a>
-<span class="sourceLineNo">412</span>  /**<a name="line.412"></a>
-<span class="sourceLineNo">413</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return Reader for the store file.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   * @throws IOException<a name="line.415"></a>
-<span class="sourceLineNo">416</span>   * @see #closeReader(boolean)<a name="line.416"></a>
-<span class="sourceLineNo">417</span>   */<a name="line.417"></a>
-<span class="sourceLineNo">418</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    if (this.reader != null) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      throw new IllegalAccessError("Already open");<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    }<a name="line.421"></a>
-<span class="sourceLineNo">422</span><a name="line.422"></a>
-<span class="sourceLineNo">423</span>    // Open the StoreFile.Reader<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.427"></a>
-<span class="sourceLineNo">428</span><a name="line.428"></a>
-<span class="sourceLineNo">429</span>    // Read in our metadata.<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    if (b != null) {<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.434"></a>
-<span class="sourceLineNo">435</span>      // since store files are distinguished by sequence id, the one half would<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // subsume the other.<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.sequenceid = Bytes.toLong(b);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      if (fileInfo.isTopReference()) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        this.sequenceid += 1;<a name="line.439"></a>
-<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    }<a name="line.441"></a>
-<span class="sourceLineNo">442</span><a name="line.442"></a>
-<span class="sourceLineNo">443</span>    if (isBulkLoadResult()){<a name="line.443"></a>
-<span class="sourceLineNo">444</span>      // generate the sequenceId from the fileName<a name="line.444"></a>
-<span class="sourceLineNo">445</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      String fileName = this.getPath().getName();<a name="line.446"></a>
-<span class="sourceLineNo">447</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      if (startPos != -1) {<a name="line.449"></a>
-<span class="sourceLineNo">450</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.450"></a>
-<span class="sourceLineNo">451</span>            fileName.indexOf('_', startPos + 6)));<a name="line.451"></a>
-<span class="sourceLineNo">452</span>        // Handle reference files as done above.<a name="line.452"></a>
-<span class="sourceLineNo">453</span>        if (fileInfo.isTopReference()) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      // have the same row key but different seqIds.<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      this.reader.setBulkLoaded(true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    }<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.465"></a>
-<span class="sourceLineNo">466</span><a name="line.466"></a>
-<span class="sourceLineNo">467</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    if (b != null) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    }<a name="line.470"></a>
-<span class="sourceLineNo">471</span><a name="line.471"></a>
-<span class="sourceLineNo">472</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (b != null) {<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      boolean mc = Bytes.toBoolean(b);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (this.majorCompaction == null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      } else {<a name="line.477"></a>
-<span class="sourceLineNo">478</span>        this.majorCompaction.set(mc);<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      }<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    } else {<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      this.majorCompaction = new AtomicBoolean(false);<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    if (cfBloomType != BloomType.NONE) {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (hfileBloomType != cfBloomType) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        LOG.info("HFile Bloom filter type for "<a name="line.493"></a>
-<span class="sourceLineNo">494</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.494"></a>
-<span class="sourceLineNo">495</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.495"></a>
-<span class="sourceLineNo">496</span>            + "configuration");<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.499"></a>
-<span class="sourceLineNo">500</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>    try {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      if (timerangeBytes != null) {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      }<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    } catch (IllegalArgumentException e) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.513"></a>
-<span class="sourceLineNo">514</span>          "proceeding without", e);<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      this.reader.timeRangeTracker = null;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>    // initialize so we can reuse them after reader closed.<a name="line.517"></a>
-<span class="sourceLineNo">518</span>    firstKey = reader.getFirstKey();<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    lastKey = reader.getLastKey();<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    comparator = reader.getComparator();<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.reader;<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  public Reader createReader() throws IOException {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>    return createReader(false);<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  /**<a name="line.528"></a>
-<span class="sourceLineNo">529</span>   * @return Reader for StoreFile. creates if necessary<a name="line.529"></a>
-<span class="sourceLineNo">530</span>   * @throws IOException<a name="line.530"></a>
-<span class="sourceLineNo">531</span>   */<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    if (this.reader == null) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      try {<a name="line.534"></a>
-<span class="sourceLineNo">535</span>        this.reader = open(canUseDropBehind);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>      } catch (IOException e) {<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        try {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          boolean evictOnClose =<a name="line.538"></a>
-<span class="sourceLineNo">539</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.539"></a>
-<span class="sourceLineNo">540</span>          this.closeReader(evictOnClose);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>        } catch (IOException ee) {<a name="line.541"></a>
-<span class="sourceLineNo">542</span>        }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>        throw e;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>      }<a name="line.544"></a>
-<span class="sourceLineNo">545</span><a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span>    return this.reader;<a name="line.547"></a>
-<span class="sourceLineNo">548</span>  }<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>   * @return Current reader.  Must call createReader first else returns null.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>   * @see #createReader()<a name="line.552"></a>
-<span class="sourceLineNo">553</span>   */<a name="line.553"></a>
-<span class="sourceLineNo">554</span>  public Reader getReader() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>    return this.reader;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  }<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>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.559"></a>
-<span class="sourceLineNo">560</span>   * @throws IOException<a name="line.560"></a>
-<span class="sourceLineNo">561</span>   */<a name="line.561"></a>
-<span class="sourceLineNo">562</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.562"></a>
-<span class="sourceLineNo">563</span>      throws IOException {<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    if (this.reader != null) {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      this.reader.close(evictOnClose);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      this.reader = null;<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    }<a name="line.567"></a>
-<span class="sourceLineNo">568</span>  }<a name="line.568"></a>
-<span class="sourceLineNo">569</span><a name="line.569"></a>
-<span class="sourceLineNo">570</span>  /**<a name="line.570"></a>
-<span class="sourceLineNo">571</span>   * Marks the status of the file as compactedAway.<a name="line.571"></a>
-<span class="sourceLineNo">572</span>   */<a name="line.572"></a>
-<span class="sourceLineNo">573</span>  public void markCompactedAway() {<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    if (this.reader != null) {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      this.reader.markCompactedAway();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    }<a name="line.576"></a>
-<span class="sourceLineNo">577</span>  }<a name="line.577"></a>
-<span class="sourceLineNo">578</span><a name="line.578"></a>
-<span class="sourceLineNo">579</span>  /**<a name="line.579"></a>
-<span class="sourceLineNo">580</span>   * Delete this file<a name="line.580"></a>
-<span class="sourceLineNo">581</span>   * @throws IOException<a name="line.581"></a>
-<span class="sourceLineNo">582</span>   */<a name="line.582"></a>
-<span class="sourceLineNo">583</span>  public void deleteReader() throws IOException {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>    boolean evictOnClose =<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.585"></a>
-<span class="sourceLineNo">586</span>    closeReader(evictOnClose);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>    this.fs.delete(getPath(), true);<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>  @Override<a name="line.590"></a>
-<span class="sourceLineNo">591</span>  public String toString() {<a name="line.591"></a>
-<span class="sourceLineNo">592</span>    return this.fileInfo.toString();<a name="line.592"></a>
-<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
-<span class="sourceLineNo">594</span><a name="line.594"></a>
-<span class="sourceLineNo">595</span>  /**<a name="line.595"></a>
-<span class="sourceLineNo">596</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.596"></a>
-<span class="sourceLineNo">597</span>   */<a name="line.597"></a>
-<span class="sourceLineNo">598</span>  public String toStringDetailed() {<a name="line.598"></a>
-<span class="sourceLineNo">599</span>    StringBuilder sb = new StringBuilder();<a name="line.599"></a>
-<span class="sourceLineNo">600</span>    sb.append(this.getPath().toString());<a name="line.600"></a>
-<span class="sourceLineNo">601</span>    sb.append(", isReference=").append(isReference());<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.602"></a>
-<span class="sourceLineNo">603</span>    if (isBulkLoadResult()) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>    } else {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    }<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>    return sb.toString();<a name="line.610"></a>
-<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
-<span class="sourceLineNo">612</span><a name="line.612"></a>
-<span class="sourceLineNo">613</span>  /**<a name="line.613"></a>
-<span class="sourceLineNo">614</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * @return Whether to skip resetting the sequence id.<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   */<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    }<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    return false;<a name="line.622"></a>
-<span class="sourceLineNo">623</span>  }<a name="line.623"></a>
-<span class="sourceLineNo">624</span><a name="line.624"></a>
-<span class="sourceLineNo">625</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.625"></a>
-<span class="sourceLineNo">626</span>      justification="Will not overflow")<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  public static class WriterBuilder {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    private final Configuration conf;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    private final CacheConfig cacheConf;<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    private final FileSystem fs;<a name="line.630"></a>
+<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * @return This files maximum edit sequence id.<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  public long getMaxSequenceId() {<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return this.sequenceid;<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>  public long getModificationTimeStamp() throws IOException {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    return (fileInfo == null) ? 0 : fileInfo.getModificationTime();<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>  /**<a name="line.328"></a>
+<span class="sourceLineNo">329</span>   * Only used by the Striped Compaction Policy<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * @param key<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * @return value associated with the metadata key<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   */<a name="line.332"></a>
+<span class="sourceLineNo">333</span>  public byte[] getMetadataValue(byte[] key) {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    return metadataMap.get(key);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>  }<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>   * Return the largest memstoreTS found across all storefiles in<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * the given list. Store files that were created by a mapreduce<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * bulk load are ignored, as they do not correspond to any specific<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * put operation, and thus do not have a memstoreTS associated with them.<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   * does not yet have any store files.<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   */<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public static long getMaxMemstoreTSInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    long max = 0;<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    for (StoreFile sf : sfs) {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (!sf.isBulkLoadResult()) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        max = Math.max(max, sf.getMaxMemstoreTS());<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    return max;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  }<a name="line.353"></a>
+<span class="sourceLineNo">354</span><a name="line.354"></a>
+<span class="sourceLineNo">355</span>  /**<a name="line.355"></a>
+<span class="sourceLineNo">356</span>   * Return the highest sequence ID found across all storefiles in<a name="line.356"></a>
+<span class="sourceLineNo">357</span>   * the given list.<a name="line.357"></a>
+<span class="sourceLineNo">358</span>   * @param sfs<a name="line.358"></a>
+<span class="sourceLineNo">359</span>   * @return 0 if no non-bulk-load files are provided or, this is Store that<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * does not yet have any store files.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   */<a name="line.361"></a>
+<span class="sourceLineNo">362</span>  public static long getMaxSequenceIdInList(Collection&lt;StoreFile&gt; sfs) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    long max = 0;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    for (StoreFile sf : sfs) {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      max = Math.max(max, sf.getMaxSequenceId());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    return max;<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>  /**<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   * Check if this storefile was created by bulk load.<a name="line.371"></a>
+<span class="sourceLineNo">372</span>   * When a hfile is bulk loaded into HBase, we append<a name="line.372"></a>
+<span class="sourceLineNo">373</span>   * {@code '_SeqId_&lt;id-when-loaded&gt;'} to the hfile name, unless<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * "hbase.mapreduce.bulkload.assign.sequenceNumbers" is<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * explicitly turned off.<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   * If "hbase.mapreduce.bulkload.assign.sequenceNumbers"<a name="line.376"></a>
+<span class="sourceLineNo">377</span>   * is turned off, fall back to BULKLOAD_TIME_KEY.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>   * @return true if this storefile was created by bulk load.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>   */<a name="line.379"></a>
+<span class="sourceLineNo">380</span>  boolean isBulkLoadResult() {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    boolean bulkLoadedHFile = false;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    String fileName = this.getPath().getName();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    int startPos = fileName.indexOf("SeqId_");<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    if (startPos != -1) {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      bulkLoadedHFile = true;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    }<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    return bulkLoadedHFile || metadataMap.containsKey(BULKLOAD_TIME_KEY);<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  @VisibleForTesting<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  public boolean isCompactedAway() {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    if (this.reader != null) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      return this.reader.isCompactedAway();<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    }<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    return true;<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>  @VisibleForTesting<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public int getRefCount() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return this.reader.refCount.get();<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 timestamp at which this bulk load file was generated.<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
+<span class="sourceLineNo">406</span>  public long getBulkLoadTimestamp() {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    byte[] bulkLoadTimestamp = metadataMap.get(BULKLOAD_TIME_KEY);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    return (bulkLoadTimestamp == null) ? 0 : Bytes.toLong(bulkLoadTimestamp);<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>  /**<a name="line.411"></a>
+<span class="sourceLineNo">412</span>   * @return the cached value of HDFS blocks distribution. The cached value is<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   * calculated when store file is opened.<a name="line.413"></a>
+<span class="sourceLineNo">414</span>   */<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  public HDFSBlocksDistribution getHDFSBlockDistribution() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    return this.fileInfo.getHDFSBlockDistribution();<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>  /**<a name="line.419"></a>
+<span class="sourceLineNo">420</span>   * Opens reader on this store file.  Called by Constructor.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>   * @return Reader for the store file.<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @throws IOException<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   * @see #closeReader(boolean)<a name="line.423"></a>
+<span class="sourceLineNo">424</span>   */<a name="line.424"></a>
+<span class="sourceLineNo">425</span>  private Reader open(boolean canUseDropBehind) throws IOException {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    if (this.reader != null) {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      throw new IllegalAccessError("Already open");<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">429</span><a name="line.429"></a>
+<span class="sourceLineNo">430</span>    // Open the StoreFile.Reader<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    this.reader = fileInfo.open(this.fs, this.cacheConf, canUseDropBehind);<a name="line.431"></a>
+<span class="sourceLineNo">432</span><a name="line.432"></a>
+<span class="sourceLineNo">433</span>    // Load up indices and fileinfo. This also loads Bloom filter type.<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    metadataMap = Collections.unmodifiableMap(this.reader.loadFileInfo());<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    // Read in our metadata.<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    byte [] b = metadataMap.get(MAX_SEQ_ID_KEY);<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    if (b != null) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>      // By convention, if halfhfile, top half has a sequence number &gt; bottom<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      // half. Thats why we add one in below. Its done for case the two halves<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      // are ever merged back together --rare.  Without it, on open of store,<a name="line.441"></a>
+<span class="sourceLineNo">442</span>      // since store files are distinguished by sequence id, the one half would<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      // subsume the other.<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      this.sequenceid = Bytes.toLong(b);<a name="line.444"></a>
+<span class="sourceLineNo">445</span>      if (fileInfo.isTopReference()) {<a name="line.445"></a>
+<span class="sourceLineNo">446</span>        this.sequenceid += 1;<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      }<a name="line.447"></a>
+<span class="sourceLineNo">448</span>    }<a name="line.448"></a>
+<span class="sourceLineNo">449</span><a name="line.449"></a>
+<span class="sourceLineNo">450</span>    if (isBulkLoadResult()){<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      // generate the sequenceId from the fileName<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      // fileName is of the form &lt;randomName&gt;_SeqId_&lt;id-when-loaded&gt;_<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      String fileName = this.getPath().getName();<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      // Use lastIndexOf() to get the last, most recent bulk load seqId.<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      int startPos = fileName.lastIndexOf("SeqId_");<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      if (startPos != -1) {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        this.sequenceid = Long.parseLong(fileName.substring(startPos + 6,<a name="line.457"></a>
+<span class="sourceLineNo">458</span>            fileName.indexOf('_', startPos + 6)));<a name="line.458"></a>
+<span class="sourceLineNo">459</span>        // Handle reference files as done above.<a name="line.459"></a>
+<span class="sourceLineNo">460</span>        if (fileInfo.isTopReference()) {<a name="line.460"></a>
+<span class="sourceLineNo">461</span>          this.sequenceid += 1;<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>      // SKIP_RESET_SEQ_ID only works in bulk loaded file.<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      // In mob compaction, the hfile where the cells contain the path of a new mob file is bulk<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      // loaded to hbase, these cells have the same seqIds with the old ones. We do not want<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      // to reset new seqIds for them since this might make a mess of the visibility of cells that<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      // have the same row key but different seqIds.<a name="line.468"></a>
+<span class="sourceLineNo">469</span>      this.reader.setSkipResetSeqId(isSkipResetSeqId(metadataMap.get(SKIP_RESET_SEQ_ID)));<a name="line.469"></a>
+<span class="sourceLineNo">470</span>      this.reader.setBulkLoaded(true);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    this.reader.setSequenceID(this.sequenceid);<a name="line.472"></a>
+<span class="sourceLineNo">473</span><a name="line.473"></a>
+<span class="sourceLineNo">474</span>    b = metadataMap.get(HFile.Writer.MAX_MEMSTORE_TS_KEY);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    if (b != null) {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      this.maxMemstoreTS = Bytes.toLong(b);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    }<a name="line.477"></a>
+<span class="sourceLineNo">478</span><a name="line.478"></a>
+<span class="sourceLineNo">479</span>    b = metadataMap.get(MAJOR_COMPACTION_KEY);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    if (b != null) {<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      boolean mc = Bytes.toBoolean(b);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>      if (this.majorCompaction == null) {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>        this.majorCompaction = new AtomicBoolean(mc);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      } else {<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        this.majorCompaction.set(mc);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    } else {<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      // Presume it is not major compacted if it doesn't explicity say so<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      // HFileOutputFormat explicitly sets the major compacted key.<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      this.majorCompaction = new AtomicBoolean(false);<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>    b = metadataMap.get(EXCLUDE_FROM_MINOR_COMPACTION_KEY);<a name="line.493"></a>
+<span class="sourceLineNo">494</span>    this.excludeFromMinorCompaction = (b != null &amp;&amp; Bytes.toBoolean(b));<a name="line.494"></a>
+<span class="sourceLineNo">495</span><a name="line.495"></a>
+<span class="sourceLineNo">496</span>    BloomType hfileBloomType = reader.getBloomFilterType();<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    if (cfBloomType != BloomType.NONE) {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      reader.loadBloomfilter(BlockType.GENERAL_BLOOM_META);<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      if (hfileBloomType != cfBloomType) {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        LOG.info("HFile Bloom filter type for "<a name="line.500"></a>
+<span class="sourceLineNo">501</span>            + reader.getHFileReader().getName() + ": " + hfileBloomType<a name="line.501"></a>
+<span class="sourceLineNo">502</span>            + ", but " + cfBloomType + " specified in column family "<a name="line.502"></a>
+<span class="sourceLineNo">503</span>            + "configuration");<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    } else if (hfileBloomType != BloomType.NONE) {<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      LOG.info("Bloom filter turned off by CF config for "<a name="line.506"></a>
+<span class="sourceLineNo">507</span>          + reader.getHFileReader().getName());<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>    // load delete family bloom filter<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    reader.loadBloomfilter(BlockType.DELETE_FAMILY_BLOOM_META);<a name="line.511"></a>
+<span class="sourceLineNo">512</span><a name="line.512"></a>
+<span class="sourceLineNo">513</span>    try {<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      byte [] timerangeBytes = metadataMap.get(TIMERANGE_KEY);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>      if (timerangeBytes != null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>        this.reader.timeRangeTracker = new TimeRangeTracker();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        Writables.copyWritable(timerangeBytes, this.reader.timeRangeTracker);<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>    } catch (IllegalArgumentException e) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      LOG.error("Error reading timestamp range data from meta -- " +<a name="line.520"></a>
+<span class="sourceLineNo">521</span>          "proceeding without", e);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      this.reader.timeRangeTracker = null;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    // initialize so we can reuse them after reader closed.<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    firstKey = reader.getFirstKey();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    lastKey = reader.getLastKey();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>    comparator = reader.getComparator();<a name="line.527"></a>
+<span class="sourceLineNo">528</span>    return this.reader;<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>  public Reader createReader() throws IOException {<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    return createReader(false);<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  }<a name="line.533"></a>
+<span class="sourceLineNo">534</span><a name="line.534"></a>
+<span class="sourceLineNo">535</span>  /**<a name="line.535"></a>
+<span class="sourceLineNo">536</span>   * @return Reader for StoreFile. creates if necessary<a name="line.536"></a>
+<span class="sourceLineNo">537</span>   * @throws IOException<a name="line.537"></a>
+<span class="sourceLineNo">538</span>   */<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Reader createReader(boolean canUseDropBehind) throws IOException {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    if (this.reader == null) {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      try {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>        this.reader = open(canUseDropBehind);<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      } catch (IOException e) {<a name="line.543"></a>
+<span class="sourceLineNo">544</span>        try {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          boolean evictOnClose =<a name="line.545"></a>
+<span class="sourceLineNo">546</span>              cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.546"></a>
+<span class="sourceLineNo">547</span>          this.closeReader(evictOnClose);<a name="line.547"></a>
+<span class="sourceLineNo">548</span>        } catch (IOException ee) {<a name="line.548"></a>
+<span class="sourceLineNo">549</span>        }<a name="line.549"></a>
+<span class="sourceLineNo">550</span>        throw e;<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>    }<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    return this.reader;<a name="line.554"></a>
+<span class="sourceLineNo">555</span>  }<a name="line.555"></a>
+<span class="sourceLineNo">556</span><a name="line.556"></a>
+<span class="sourceLineNo">557</span>  /**<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   * @return Current reader.  Must call createReader first else returns null.<a name="line.558"></a>
+<span class="sourceLineNo">559</span>   * @see #createReader()<a name="line.559"></a>
+<span class="sourceLineNo">560</span>   */<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  public Reader getReader() {<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    return this.reader;<a name="line.562"></a>
+<span class="sourceLineNo">563</span>  }<a name="line.563"></a>
+<span class="sourceLineNo">564</span><a name="line.564"></a>
+<span class="sourceLineNo">565</span>  /**<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   * @param evictOnClose whether to evict blocks belonging to this file<a name="line.566"></a>
+<span class="sourceLineNo">567</span>   * @throws IOException<a name="line.567"></a>
+<span class="sourceLineNo">568</span>   */<a name="line.568"></a>
+<span class="sourceLineNo">569</span>  public synchronized void closeReader(boolean evictOnClose)<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      throws IOException {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    if (this.reader != null) {<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.reader.close(evictOnClose);<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.reader = null;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    }<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>  /**<a name="line.577"></a>
+<span class="sourceLineNo">578</span>   * Marks the status of the file as compactedAway.<a name="line.578"></a>
+<span class="sourceLineNo">579</span>   */<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  public void markCompactedAway() {<a name="line.580"></a>
+<span class="sourceLineNo">581</span>    if (this.reader != null) {<a name="line.581"></a>
+<span class="sourceLineNo">582</span>      this.reader.markCompactedAway();<a name="line.582"></a>
+<span class="sourceLineNo">583</span>    }<a name="line.583"></a>
+<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
+<span class="sourceLineNo">585</span><a name="line.585"></a>
+<span class="sourceLineNo">586</span>  /**<a name="line.586"></a>
+<span class="sourceLineNo">587</span>   * Delete this file<a name="line.587"></a>
+<span class="sourceLineNo">588</span>   * @throws IOException<a name="line.588"></a>
+<span class="sourceLineNo">589</span>   */<a name="line.589"></a>
+<span class="sourceLineNo">590</span>  public void deleteReader() throws IOException {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>    boolean evictOnClose =<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        cacheConf != null? cacheConf.shouldEvictOnClose(): true; <a name="line.592"></a>
+<span class="sourceLineNo">593</span>    closeReader(evictOnClose);<a name="line.593"></a>
+<span class="sourceLineNo">594</span>    this.fs.delete(getPath(), true);<a name="line.594"></a>
+<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
+<span class="sourceLineNo">596</span><a name="line.596"></a>
+<span class="sourceLineNo">597</span>  @Override<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  public String toString() {<a name="line.598"></a>
+<span class="sourceLineNo">599</span>    return this.fileInfo.toString();<a name="line.599"></a>
+<span class="sourceLineNo">600</span>  }<a name="line.600"></a>
+<span class="sourceLineNo">601</span><a name="line.601"></a>
+<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
+<span class="sourceLineNo">603</span>   * @return a length description of this StoreFile, suitable for debug output<a name="line.603"></a>
+<span class="sourceLineNo">604</span>   */<a name="line.604"></a>
+<span class="sourceLineNo">605</span>  public String toStringDetailed() {<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    StringBuilder sb = new StringBuilder();<a name="line.606"></a>
+<span class="sourceLineNo">607</span>    sb.append(this.getPath().toString());<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    sb.append(", isReference=").append(isReference());<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    sb.append(", isBulkLoadResult=").append(isBulkLoadResult());<a name="line.609"></a>
+<span class="sourceLineNo">610</span>    if (isBulkLoadResult()) {<a name="line.610"></a>
+<span class="sourceLineNo">611</span>      sb.append(", bulkLoadTS=").append(getBulkLoadTimestamp());<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    } else {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      sb.append(", seqid=").append(getMaxSequenceId());<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    sb.append(", majorCompaction=").append(isMajorCompaction());<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    return sb.toString();<a name="line.617"></a>
+<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
+<span class="sourceLineNo">619</span><a name="line.619"></a>
+<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * Gets whether to skip resetting the sequence id for cells.<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @param skipResetSeqId The byte array of boolean.<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   * @return Whether to skip resetting the sequence id.<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   */<a name="line.624"></a>
+<span class="sourceLineNo">625</span>  private boolean isSkipResetSeqId(byte[] skipResetSeqId) {<a name="line.625"></a>
+<span class="sourceLineNo">626</span>    if (skipResetSeqId != null &amp;&amp; skipResetSeqId.length == 1) {<a name="line.626"></a>
+<span class="sourceLineNo">627</span>      return Bytes.toBoolean(skipResetSeqId);<a name="line.627"></a>
+<span class="sourceLineNo">628</span>    }<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    return false;<a name="line.629"></a>
+<span class="sourceLineNo">630</span>  }<a name="line.630"></a>
 <span class="sourceLineNo">631</span><a name="line.631"></a>
-<span class="sourceLineNo">632</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    private BloomType bloomType = BloomType.NONE;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    private long maxKeyCount = 0;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    private Path dir;<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    private Path filePath;<a name="line.636"></a>
-<span class="sourceLineNo">637</span>    private InetSocketAddress[] favoredNodes;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    private HFileContext fileContext;<a name="line.638"></a>
-<span class="sourceLineNo">639</span><a name="line.639"></a>
-<span class="sourceLineNo">640</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.640"></a>
-<span class="sourceLineNo">641</span>        FileSystem fs) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      this.conf = conf;<a name="line.642"></a>
-<span class="sourceLineNo">643</span>      this.cacheConf = cacheConf;<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      this.fs = fs;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>    }<a name="line.645"></a>
+<span class="sourceLineNo">632</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="ICAST_INTEGER_MULTIPLY_CAST_TO_LONG",<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      justification="Will not overflow")<a name="line.633"></a>
+<span class="sourceLineNo">634</span>  public static class WriterBuilder {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    private final Configuration conf;<a name="line.635"></a>
+<span class="sourceLineNo">636</span>    private final CacheConfig cacheConf;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    private final FileSystem fs;<a name="line.637"></a>
+<span class="sourceLineNo">638</span><a name="line.638"></a>
+<span class="sourceLineNo">639</span>    private CellComparator comparator = CellComparator.COMPARATOR;<a name="line.639"></a>
+<span class="sourceLineNo">640</span>    private BloomType bloomType = BloomType.NONE;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>    private long maxKeyCount = 0;<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    private Path dir;<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    private Path filePath;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    private InetSocketAddress[] favoredNodes;<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    private HFileContext fileContext;<a name="line.645"></a>
 <span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>    /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>     * @param dir Path to column family directory. The directory is created if<a name="line.649"></a>
-<span class="sourceLineNo">650</span>     *          does not exist. The file is given a unique name within this<a name="line.650"></a>
-<span class="sourceLineNo">651</span>     *          directory.<a name="line.651"></a>
-<span class="sourceLineNo">652</span>     * @return this (for chained invocation)<a name="line.652"></a>
-<span class="sourceLineNo">653</span>     */<a name="line.653"></a>
-<span class="sourceLineNo">654</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      Preconditions.checkNotNull(dir);<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.dir = dir;<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      return this;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span><a name="line.659"></a>
-<span class="sourceLineNo">660</span>    /**<a name="line.660"></a>
-<span class="sourceLineNo">661</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>     * @param filePath the StoreFile path to write<a name="line.662"></a>
-<span class="sourceLineNo">663</span>     * @return this (for chained invocation)<a name="line.663"></a>
-<span class="sourceLineNo">664</span>     */<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      Preconditions.checkNotNull(filePath);<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      this.filePath = filePath;<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      return this;<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    }<a name="line.669"></a>
-<span class="sourceLineNo">670</span><a name="line.670"></a>
-<span class="sourceLineNo">671</span>    /**<a name="line.671"></a>
-<span class="sourceLineNo">672</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.672"></a>
-<span class="sourceLineNo">673</span>     * @return this (for chained invocation)<a name="line.673"></a>
-<span class="sourceLineNo">674</span>     */<a name="line.674"></a>
-<span class="sourceLineNo">675</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      this.favoredNodes = favoredNodes;<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      return this;<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    }<a name="line.678"></a>
-<span class="sourceLineNo">679</span><a name="line.679"></a>
-<span class="sourceLineNo">680</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      Preconditions.checkNotNull(comparator);<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      this.comparator = comparator;<a name="line.682"></a>
-<span class="sourceLineNo">683</span>      return this;<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
-<span class="sourceLineNo">685</span><a name="line.685"></a>
-<span class="sourceLineNo">686</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      Preconditions.checkNotNull(bloomType);<a name="line.687"></a>
-<span class="sourceLineNo">688</span>      this.bloomType = bloomType;<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      return this;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>    }<a name="line.690"></a>
-<span class="sourceLineNo">691</span><a name="line.691"></a>
-<span class="sourceLineNo">692</span>    /**<a name="line.692"></a>
-<span class="sourceLineNo">693</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.693"></a>
-<span class="sourceLineNo">694</span>     * @return this (for chained invocation)<a name="line.694"></a>
-<span class="sourceLineNo">695</span>     */<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      this.maxKeyCount = maxKeyCount;<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      return this;<a name="line.698"></a>
-<span class="sourceLineNo">699</span>    }<a name="line.699"></a>
-<span class="sourceLineNo">700</span><a name="line.700"></a>
-<span class="sourceLineNo">701</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      this.fileContext = fileContext;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      return this;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>    }<a name="line.704"></a>
-<span class="sourceLineNo">705</span><a name="line.705"></a>
-<span class="sourceLineNo">706</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      return this;<a name="line.708"></a>
-<span class="sourceLineNo">709</span>    }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>    /**<a name="line.710"></a>
-<span class="sourceLineNo">711</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.711"></a>
-<span class="sourceLineNo">712</span>     * done. If metadata, add BEFORE closing using<a name="line.712"></a>
-<span class="sourceLineNo">713</span>     * {@link Writer#appendMetadata}.<a name="line.713"></a>
-<span class="sourceLineNo">714</span>     */<a name="line.714"></a>
-<span class="sourceLineNo">715</span>    public Writer build() throws IOException {<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            "or file path");<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>      if (dir == null) {<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        dir = filePath.getParent();<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      }<a name="line.723"></a>
-<span class="sourceLineNo">724</span><a name="line.724"></a>
-<span class="sourceLineNo">725</span>      if (!fs.exists(dir)) {<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        fs.mkdirs(dir);<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (filePath == null) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        filePath = getUniqueFile(fs, dir);<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        if (!BloomFilterFactory.isGeneralBloomEnabled(conf)) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>          bloomType = BloomType.NONE;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>        }<a name="line.733"></a>
+<span class="sourceLineNo">647</span>    public WriterBuilder(Configuration conf, CacheConfig cacheConf,<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        FileSystem fs) {<a name="line.648"></a>
+<span class="sourceLineNo">649</span>      this.conf = conf;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>      this.cacheConf = cacheConf;<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      this.fs = fs;<a name="line.651"></a>
+<span class="sourceLineNo">652</span>    }<a name="line.652"></a>
+<span class="sourceLineNo">653</span><a name="line.653"></a>
+<span class="sourceLineNo">654</span>    /**<a name="line.654"></a>
+<span class="sourceLineNo">655</span>     * Use either this method or {@link #withFilePath}, but not both.<a name="line.655"></a>
+<span class="sourceLineNo">656</span>     * @param dir Path to column family directory. The directory is created if<a name="line.656"></a>
+<span class="sourceLineNo">657</span>     *          does not exist. The file is given a unique name within this<a name="line.657"></a>
+<span class="sourceLineNo">658</span>     *          directory.<a name="line.658"></a>
+<span class="sourceLineNo">659</span>     * @return this (for chained invocation)<a name="line.659"></a>
+<span class="sourceLineNo">660</span>     */<a name="line.660"></a>
+<span class="sourceLineNo">661</span>    public WriterBuilder withOutputDir(Path dir) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      Preconditions.checkNotNull(dir);<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.dir = dir;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      return this;<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span><a name="line.666"></a>
+<span class="sourceLineNo">667</span>    /**<a name="line.667"></a>
+<span class="sourceLineNo">668</span>     * Use either this method or {@link #withOutputDir}, but not both.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>     * @param filePath the StoreFile path to write<a name="line.669"></a>
+<span class="sourceLineNo">670</span>     * @return this (for chained invocation)<a name="line.670"></a>
+<span class="sourceLineNo">671</span>     */<a name="line.671"></a>
+<span class="sourceLineNo">672</span>    public WriterBuilder withFilePath(Path filePath) {<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      Preconditions.checkNotNull(filePath);<a name="line.673"></a>
+<span class="sourceLineNo">674</span>      this.filePath = filePath;<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      return this;<a name="line.675"></a>
+<span class="sourceLineNo">676</span>    }<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    /**<a name="line.678"></a>
+<span class="sourceLineNo">679</span>     * @param favoredNodes an array of favored nodes or possibly null<a name="line.679"></a>
+<span class="sourceLineNo">680</span>     * @return this (for chained invocation)<a name="line.680"></a>
+<span class="sourceLineNo">681</span>     */<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    public WriterBuilder withFavoredNodes(InetSocketAddress[] favoredNodes) {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      this.favoredNodes = favoredNodes;<a name="line.683"></a>
+<span class="sourceLineNo">684</span>      return this;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>    }<a name="line.685"></a>
+<span class="sourceLineNo">686</span><a name="line.686"></a>
+<span class="sourceLineNo">687</span>    public WriterBuilder withComparator(CellComparator comparator) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      Preconditions.checkNotNull(comparator);<a name="line.688"></a>
+<span class="sourceLineNo">689</span>      this.comparator = comparator;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>      return this;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    }<a name="line.691"></a>
+<span class="sourceLineNo">692</span><a name="line.692"></a>
+<span class="sourceLineNo">693</span>    public WriterBuilder withBloomType(BloomType bloomType) {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>      Preconditions.checkNotNull(bloomType);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      this.bloomType = bloomType;<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      return this;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    }<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>    /**<a name="line.699"></a>
+<span class="sourceLineNo">700</span>     * @param maxKeyCount estimated maximum number of keys we expect to add<a name="line.700"></a>
+<span class="sourceLineNo">701</span>     * @return this (for chained invocation)<a name="line.701"></a>
+<span class="sourceLineNo">702</span>     */<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    public WriterBuilder withMaxKeyCount(long maxKeyCount) {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      this.maxKeyCount = maxKeyCount;<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return this;<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
+<span class="sourceLineNo">707</span><a name="line.707"></a>
+<span class="sourceLineNo">708</span>    public WriterBuilder withFileContext(HFileContext fileContext) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      this.fileContext = fileContext;<a name="line.709"></a>
+<span class="sourceLineNo">710</span>      return this;<a name="line.710"></a>
+<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
+<span class="sourceLineNo">712</span><a name="line.712"></a>
+<span class="sourceLineNo">713</span>    public WriterBuilder withShouldDropCacheBehind(boolean shouldDropCacheBehind/*NOT USED!!*/) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      // TODO: HAS NO EFFECT!!! FIX!!<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      return this;<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    }<a name="line.716"></a>
+<span class="sourceLineNo">717</span>    /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>     * Create a store file writer. Client is responsible for closing file when<a name="line.718"></a>
+<span class="sourceLineNo">719</span>     * done. If metadata, add BEFORE closing using<a name="line.719"></a>
+<span class="sourceLineNo">720</span>     * {@link Writer#appendMetadata}.<a name="line.720"></a>
+<span class="sourceLineNo">721</span>     */<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    public Writer build() throws IOException {<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      if ((dir == null ? 0 : 1) + (filePath == null ? 0 : 1) != 1) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        throw new IllegalArgumentException("Either specify parent directory " +<a name="line.724"></a>
+<span class="sourceLineNo">725</span>            "or file path");<a name="line.725"></a>
+<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
+<span class="sourceLineNo">727</span><a name="line.727"></a>
+<span class="sourceLineNo">728</span>      if (dir == null) {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        dir = filePath.getParent();<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (!fs.exists(dir)) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        fs.mkdirs(dir);<a name="line.733"></a>
 <span class="sourceLineNo">734</span>      }<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>      if (comparator == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>        comparator = CellComparator.COMPARATOR;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>      }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      return new Writer(fs, filePath,<a name="line.739"></a>
-<span class="sourceLineNo">740</span>          conf, cacheConf, comparator, bloomType, maxKeyCount, favoredNodes, fileContext);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>  }<a name="line.742"></a>
-<span class="sourceLineNo">743</span><a name="line.743"></a>
-<span class="sourceLineNo">744</span>  /**<a name="line.744"></a>
-<span class="sourceLineNo">745</span>   * @param fs<a name="line.745"></a>
-<span class="sourceLineNo">746</span>   * @param dir Directory to create file in.<a name="line.746"></a>
-<span class="sourceLineNo">747</span>   * @return random filename inside passed &lt;code&gt;dir&lt;/code&gt;<a name="line.747"></a>
-<span class="sourceLineNo">748</span>   */<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  public static Path getUniqueFile(final FileSystem fs, final Path dir)<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      throws IOException {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>    if (!fs.getFileStatus(dir).isDirectory()) {<a name="line.751"></a>
-<span class="sourceLineNo">752</span>      throw new IOException("Expecting " + dir.toString() +<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        " to be a directory");<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    return new Path(dir, UUID.randomUUID().toString().replaceAll("-", ""));<a name="line.755"></a>
-<span class="sourceLineNo">756</span>  }<a name="line.756"></a>
-<span class="sourceLineNo">757</span><a name="line.757"></a>
-<span class="sourceLineNo">758</span>  public Long getMinimumTimestamp() {<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    return (getReader().timeRangeTracker == null) ?<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        null :<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        getReader().timeRangeTracker.getMinimumTimestamp();<a name="line.761"></a>
-<span class="sourceLineNo">762</span>  }<a name="line.762"></a>
-<span class="sourceLineNo">763</span><a name="line.763"></a>
-<span class="sourceLineNo">764</span>  /**<a name="line.764"></a>
-<span class="sourceLineNo">765</span>   * Gets the approximate mid-point of this file that is optimal for use in splitting it.<a name="line.765"></a>
-<span class="sourceLineNo">766</span>   * @param comparator Comparator used to compare KVs.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>   * @return The split point row, or null if splitting is not possible, or reader is null.<a name="line.767"></a>
-<span class="sourceLineNo">768</span>   */<a name="line.768"></a>
-<span class="sourceLineNo">769</span>  @SuppressWarnings("deprecation")<a name="line.769"></a>
-<span class="sourceLineNo">770</span>  byte[] getFileSplitPoint(CellComparator comparator) throws IOException {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    if (this.reader == null) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      LOG.warn("Storefile " + this + " Reader is null; cannot get split point");<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      return null;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    // Get first, last, and mid keys.  Midkey is the key that starts block<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // in middle of hfile.  Has column and timestamp.  Need to return just<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    // the row we want to split on as midkey.<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    Cell midkey = this.reader.midkey();<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    if (midkey != null) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>      Cell firstKey = this.reader.getFirstKey();<a name="line.780"></a>
-<span class="sourceLineNo">781</span>      Cell lastKey = this.reader.getLastKey();<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      // if the midkey is the same as the first or last keys, we cannot (ever) split this region.<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      if (comparator.compareRows(midkey, firstKey) == 0<a name="line.783"></a>
-<span class="sourceLineNo">784</span>          || comparator.compareRows(midkey, lastKey) == 0) {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        if (LOG.isDebugEnabled()) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          LOG.debug("cannot split because midkey is the same as first or last row");<a name="line.786"></a>
-<span class="sourceLineNo">787</span>        }<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        return null;<a name="line.788"></a>
-<span class="sourceLineNo">789</span>      }<a name="line.789"></a>
-<span class="sourceLineNo">790</span>      return CellUtil.cloneRow(midkey);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    }<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    return null;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>  }<a name="line.793"></a>
-<span class="sourceLineNo">794</span><a name="line.794"></a>
-<span class="sourceLineNo">795</span>  /**<a name="line.795"></a>
-<span class="sourceLineNo">796</span>   * A StoreFile writer.  Use this to read/write HBase Store Files. It is package<a name="line.796"></a>
-<span class="sourceLineNo">797</span>   * local because it is an implementation detail of the HBase regionserver.<a name="line.797"></a>
-<span class="sourceLineNo">798</span>   */<a name="line.798"></a>
-<span class="sourceLineNo">799</span>  public static class Writer implements Compactor.CellSink {<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    private final BloomFilterWriter generalBloomFilterWriter;<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    private final BloomFilterWriter deleteFamilyBloomFilterWriter;<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    private final BloomType bloomType;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>    private byte[] lastBloomKey;<a name="line.803"></a>
-<span class="sourceLineNo">804</span>    private int lastBloomKeyOffset, lastBloomKeyLen;<a name="line.804"></a>
-<span class="sourceLineNo">805</span>    private Cell lastCell = null;<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    private long earliestPutTs = HConstants.LATEST_TIMESTAMP;<a name="line.806"></a>
-<span class="sourceLineNo">807</s

<TRUNCATED>

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

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/f6cc9224/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html
index b707f70..edb4b3e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html
@@ -146,87 +146,95 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#avgStoreFileAge">avgStoreFileAge</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#blockCache">blockCache</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#blockedRequestsCount">blockedRequestsCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#cacheStats">cacheStats</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#cellsCountCompactedFromMob">cellsCountCompactedFromMob</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#cellsCountCompactedToMob">cellsCountCompactedToMob</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#cellsSizeCompactedFromMob">cellsSizeCompactedFromMob</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#cellsSizeCompactedToMob">cellsSizeCompactedToMob</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#checkAndMutateChecksFailed">checkAndMutateChecksFailed</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#checkAndMutateChecksPassed">checkAndMutateChecksPassed</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#compactedCellsCount">compactedCellsCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#compactedCellsSize">compactedCellsSize</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#dataInMemoryWithoutWAL">dataInMemoryWithoutWAL</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private org.apache.hadoop.hdfs.DFSHedgedReadMetrics</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#dfsHedgedReadMetrics">dfsHedgedReadMetrics</a></strong></code>
 <div class="block">Can be null if not on hdfs.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#executor">executor</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#filteredReadRequestsCount">filteredReadRequestsCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#flushedCellsCount">flushedCellsCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#flushedCellsSize">flushedCellsSize</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/regionserver/MetricsRegionServerWrapperImpl.html#LOG">LOG</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#majorCompactedCellsCount">majorCompactedCellsCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#majorCompactedCellsSize">majorCompactedCellsSize</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#maxStoreFileAge">maxStoreFileAge</a></strong></code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#memstoreSize">memstoreSize</a></strong></code>&nbsp;</td>
@@ -236,53 +244,61 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#metricsWALSource">metricsWALSource</a></strong></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#minStoreFileAge">minStoreFileAge</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobFileCache">mobFileCache</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobFileCacheAccessCount">mobFileCacheAccessCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobFileCacheCount">mobFileCacheCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobFileCacheEvictedCount">mobFileCacheEvictedCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private double</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobFileCacheHitRatio">mobFileCacheHitRatio</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobFileCacheMissCount">mobFileCacheMissCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobFlushCount">mobFlushCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobFlushedCellsCount">mobFlushedCellsCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobFlushedCellsSize">mobFlushedCellsSize</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobScanCellsCount">mobScanCellsCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#mobScanCellsSize">mobScanCellsSize</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#numMutationsWithoutWAL">numMutationsWithoutWAL</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#numReferenceFiles">numReferenceFiles</a></strong></code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#numStoreFiles">numStoreFiles</a></strong></code>&nbsp;</td>
@@ -387,201 +403,209 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getAvgStoreFileAge()">getAvgStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCacheCount()">getBlockCacheCount</a></strong>()</code>
 <div class="block">Get the number of items in the block cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCacheEvictedCount()">getBlockCacheEvictedCount</a></strong>()</code>
 <div class="block">Get the number of items evicted from the block cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCacheFailedInsertions()">getBlockCacheFailedInsertions</a></strong>()</code>
 <div class="block">Number of cache insertions that failed.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCacheFreeSize()">getBlockCacheFreeSize</a></strong>()</code>
 <div class="block">Get the size (in bytes) of the block cache that is free.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCacheHitCachingPercent()">getBlockCacheHitCachingPercent</a></strong>()</code>
 <div class="block">Get the percent of requests with the block cache turned on that hit the block cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCacheHitCount()">getBlockCacheHitCount</a></strong>()</code>
 <div class="block">Get the count of hits to the block cache</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCacheHitPercent()">getBlockCacheHitPercent</a></strong>()</code>
 <div class="block">Get the percent of all requests that hit the block cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCacheMissCount()">getBlockCacheMissCount</a></strong>()</code>
 <div class="block">Get the count of misses to the block cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCachePrimaryEvictedCount()">getBlockCachePrimaryEvictedCount</a></strong>()</code>
 <div class="block">Get the number of items evicted from primary replica in the block cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCachePrimaryHitCount()">getBlockCachePrimaryHitCount</a></strong>()</code>
 <div class="block">Get the count of hits to primary replica in the block cache</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCachePrimaryMissCount()">getBlockCachePrimaryMissCount</a></strong>()</code>
 <div class="block">Get the count of misses to primary replica in the block cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockCacheSize()">getBlockCacheSize</a></strong>()</code>
 <div class="block">Get the total size (in bytes) of the block cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getBlockedRequestsCount()">getBlockedRequestsCount</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getCellsCountCompactedFromMob()">getCellsCountCompactedFromMob</a></strong>()</code>
 <div class="block">Gets the number of cells moved from mob during compaction.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getCellsCountCompactedToMob()">getCellsCountCompactedToMob</a></strong>()</code>
 <div class="block">Gets the number of cells moved to mob during compaction.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getCellsSizeCompactedFromMob()">getCellsSizeCompactedFromMob</a></strong>()</code>
 <div class="block">Gets the total amount of cells moved from mob during compaction, in bytes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getCellsSizeCompactedToMob()">getCellsSizeCompactedToMob</a></strong>()</code>
 <div class="block">Gets the total amount of cells moved to mob during compaction, in bytes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getCheckAndMutateChecksFailed()">getCheckAndMutateChecksFailed</a></strong>()</code>
 <div class="block">Get the number of CAS operations that failed.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getCheckAndMutateChecksPassed()">getCheckAndMutateChecksPassed</a></strong>()</code>
 <div class="block">Get the number of CAS operations that passed.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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/regionserver/MetricsRegionServerWrapperImpl.html#getClusterId()">getClusterId</a></strong>()</code>
 <div class="block">Get the Cluster ID</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getCompactedCellsCount()">getCompactedCellsCount</a></strong>()</code>
 <div class="block">Get the number of cells processed during minor compactions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getCompactedCellsSize()">getCompactedCellsSize</a></strong>()</code>
 <div class="block">Get the total amount of data processed during minor compactions, in bytes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getCompactionQueueSize()">getCompactionQueueSize</a></strong>()</code>
 <div class="block">Get the size of the compaction queue</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><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/regionserver/MetricsRegionServerWrapperImpl.html#getCoprocessors()">getCoprocessors</a></strong>()</code>
 <div class="block">Get the co-processors</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getDataInMemoryWithoutWAL()">getDataInMemoryWithoutWAL</a></strong>()</code>
 <div class="block">Ammount of data in the memstore but not in the WAL because mutations explicitly had their
  WAL turned off.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getFilteredReadRequestsCount()">getFilteredReadRequestsCount</a></strong>()</code>
 <div class="block">Get the number of filtered read requests to regions hosted on this region server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getFlushedCellsCount()">getFlushedCellsCount</a></strong>()</code>
 <div class="block">Get the number of cells flushed to disk.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getFlushedCellsSize()">getFlushedCellsSize</a></strong>()</code>
 <div class="block">Get the total amount of data flushed to disk, in bytes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getFlushQueueSize()">getFlushQueueSize</a></strong>()</code>
 <div class="block">Get the size of the flush queue.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getHedgedReadOps()">getHedgedReadOps</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getHedgedReadWins()">getHedgedReadWins</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/regionserver/MetricsRegionServerWrapperImpl.html#getLargeCompactionQueueSize()">getLargeCompactionQueueSize</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMajorCompactedCellsCount()">getMajorCompactedCellsCount</a></strong>()</code>
 <div class="block">Get the number of cells processed during major compactions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMajorCompactedCellsSize()">getMajorCompactedCellsSize</a></strong>()</code>
 <div class="block">Get the total amount of data processed during major compactions, in bytes.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMaxStoreFileAge()">getMaxStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMemstoreSize()">getMemstoreSize</a></strong>()</code>
@@ -590,76 +614,84 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMinStoreFileAge()">getMinStoreFileAge</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMobFileCacheAccessCount()">getMobFileCacheAccessCount</a></strong>()</code>
 <div class="block">Gets the count of accesses to the mob file cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMobFileCacheCount()">getMobFileCacheCount</a></strong>()</code>
 <div class="block">Gets the count of cached mob files.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMobFileCacheEvictedCount()">getMobFileCacheEvictedCount</a></strong>()</code>
 <div class="block">Gets the number of items evicted from the mob file cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>double</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMobFileCacheHitPercent()">getMobFileCacheHitPercent</a></strong>()</code>
 <div class="block">Gets the hit percent to the mob file cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMobFileCacheMissCount()">getMobFileCacheMissCount</a></strong>()</code>
 <div class="block">Gets the count of misses to the mob file cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMobFlushCount()">getMobFlushCount</a></strong>()</code>
 <div class="block">Gets the number of the flushes in mob-enabled stores.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMobFlushedCellsCount()">getMobFlushedCellsCount</a></strong>()</code>
 <div class="block">Gets the number of mob cells flushed to disk.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMobFlushedCellsSize()">getMobFlushedCellsSize</a></strong>()</code>
 <div class="block">Gets the total amount of mob cells flushed to disk, in bytes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMobScanCellsCount()">getMobScanCellsCount</a></strong>()</code>
 <div class="block">Gets the number of scanned mob cells.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getMobScanCellsSize()">getMobScanCellsSize</a></strong>()</code>
 <div class="block">Gets the total amount of scanned mob cells, in bytes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getNumMutationsWithoutWAL()">getNumMutationsWithoutWAL</a></strong>()</code>
 <div class="block">Number of mutations received with WAL explicitly turned off.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getNumOnlineRegions()">getNumOnlineRegions</a></strong>()</code>
 <div class="block">The number of online regions</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getNumReferenceFiles()">getNumReferenceFiles</a></strong>()</code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#getNumStoreFiles()">getNumStoreFiles</a></strong>()</code>
@@ -942,13 +974,49 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.68">storeFileSize</a></pre>
 </li>
 </ul>
+<a name="maxStoreFileAge">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>maxStoreFileAge</h4>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.69">maxStoreFileAge</a></pre>
+</li>
+</ul>
+<a name="minStoreFileAge">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>minStoreFileAge</h4>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.70">minStoreFileAge</a></pre>
+</li>
+</ul>
+<a name="avgStoreFileAge">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>avgStoreFileAge</h4>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.71">avgStoreFileAge</a></pre>
+</li>
+</ul>
+<a name="numReferenceFiles">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>numReferenceFiles</h4>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.72">numReferenceFiles</a></pre>
+</li>
+</ul>
 <a name="requestsPerSecond">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>requestsPerSecond</h4>
-<pre>private volatile&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.69">requestsPerSecond</a></pre>
+<pre>private volatile&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.73">requestsPerSecond</a></pre>
 </li>
 </ul>
 <a name="readRequestsCount">
@@ -957,7 +1025,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>readRequestsCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.70">readRequestsCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.74">readRequestsCount</a></pre>
 </li>
 </ul>
 <a name="filteredReadRequestsCount">
@@ -966,7 +1034,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>filteredReadRequestsCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.71">filteredReadRequestsCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.75">filteredReadRequestsCount</a></pre>
 </li>
 </ul>
 <a name="writeRequestsCount">
@@ -975,7 +1043,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>writeRequestsCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.72">writeRequestsCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.76">writeRequestsCount</a></pre>
 </li>
 </ul>
 <a name="checkAndMutateChecksFailed">
@@ -984,7 +1052,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndMutateChecksFailed</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.73">checkAndMutateChecksFailed</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.77">checkAndMutateChecksFailed</a></pre>
 </li>
 </ul>
 <a name="checkAndMutateChecksPassed">
@@ -993,7 +1061,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndMutateChecksPassed</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.74">checkAndMutateChecksPassed</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.78">checkAndMutateChecksPassed</a></pre>
 </li>
 </ul>
 <a name="storefileIndexSize">
@@ -1002,7 +1070,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>storefileIndexSize</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.75">storefileIndexSize</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.79">storefileIndexSize</a></pre>
 </li>
 </ul>
 <a name="totalStaticIndexSize">
@@ -1011,7 +1079,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>totalStaticIndexSize</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.76">totalStaticIndexSize</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.80">totalStaticIndexSize</a></pre>
 </li>
 </ul>
 <a name="totalStaticBloomSize">
@@ -1020,7 +1088,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>totalStaticBloomSize</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.77">totalStaticBloomSize</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.81">totalStaticBloomSize</a></pre>
 </li>
 </ul>
 <a name="numMutationsWithoutWAL">
@@ -1029,7 +1097,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>numMutationsWithoutWAL</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.78">numMutationsWithoutWAL</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.82">numMutationsWithoutWAL</a></pre>
 </li>
 </ul>
 <a name="dataInMemoryWithoutWAL">
@@ -1038,7 +1106,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>dataInMemoryWithoutWAL</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.79">dataInMemoryWithoutWAL</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.83">dataInMemoryWithoutWAL</a></pre>
 </li>
 </ul>
 <a name="percentFileLocal">
@@ -1047,7 +1115,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>percentFileLocal</h4>
-<pre>private volatile&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.80">percentFileLocal</a></pre>
+<pre>private volatile&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.84">percentFileLocal</a></pre>
 </li>
 </ul>
 <a name="percentFileLocalSecondaryRegions">
@@ -1056,7 +1124,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>percentFileLocalSecondaryRegions</h4>
-<pre>private volatile&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.81">percentFileLocalSecondaryRegions</a></pre>
+<pre>private volatile&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.85">percentFileLocalSecondaryRegions</a></pre>
 </li>
 </ul>
 <a name="flushedCellsCount">
@@ -1065,7 +1133,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>flushedCellsCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.82">flushedCellsCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.86">flushedCellsCount</a></pre>
 </li>
 </ul>
 <a name="compactedCellsCount">
@@ -1074,7 +1142,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>compactedCellsCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.83">compactedCellsCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.87">compactedCellsCount</a></pre>
 </li>
 </ul>
 <a name="majorCompactedCellsCount">
@@ -1083,7 +1151,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompactedCellsCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.84">majorCompactedCellsCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.88">majorCompactedCellsCount</a></pre>
 </li>
 </ul>
 <a name="flushedCellsSize">
@@ -1092,7 +1160,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>flushedCellsSize</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.85">flushedCellsSize</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.89">flushedCellsSize</a></pre>
 </li>
 </ul>
 <a name="compactedCellsSize">
@@ -1101,7 +1169,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>compactedCellsSize</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.86">compactedCellsSize</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.90">compactedCellsSize</a></pre>
 </li>
 </ul>
 <a name="majorCompactedCellsSize">
@@ -1110,7 +1178,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>majorCompactedCellsSize</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.87">majorCompactedCellsSize</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.91">majorCompactedCellsSize</a></pre>
 </li>
 </ul>
 <a name="cellsCountCompactedToMob">
@@ -1119,7 +1187,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>cellsCountCompactedToMob</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.88">cellsCountCompactedToMob</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.92">cellsCountCompactedToMob</a></pre>
 </li>
 </ul>
 <a name="cellsCountCompactedFromMob">
@@ -1128,7 +1196,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>cellsCountCompactedFromMob</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.89">cellsCountCompactedFromMob</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.93">cellsCountCompactedFromMob</a></pre>
 </li>
 </ul>
 <a name="cellsSizeCompactedToMob">
@@ -1137,7 +1205,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>cellsSizeCompactedToMob</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.90">cellsSizeCompactedToMob</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.94">cellsSizeCompactedToMob</a></pre>
 </li>
 </ul>
 <a name="cellsSizeCompactedFromMob">
@@ -1146,7 +1214,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>cellsSizeCompactedFromMob</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.91">cellsSizeCompactedFromMob</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.95">cellsSizeCompactedFromMob</a></pre>
 </li>
 </ul>
 <a name="mobFlushCount">
@@ -1155,7 +1223,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFlushCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.92">mobFlushCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.96">mobFlushCount</a></pre>
 </li>
 </ul>
 <a name="mobFlushedCellsCount">
@@ -1164,7 +1232,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFlushedCellsCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.93">mobFlushedCellsCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.97">mobFlushedCellsCount</a></pre>
 </li>
 </ul>
 <a name="mobFlushedCellsSize">
@@ -1173,7 +1241,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFlushedCellsSize</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.94">mobFlushedCellsSize</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.98">mobFlushedCellsSize</a></pre>
 </li>
 </ul>
 <a name="mobScanCellsCount">
@@ -1182,7 +1250,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>mobScanCellsCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.95">mobScanCellsCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.99">mobScanCellsCount</a></pre>
 </li>
 </ul>
 <a name="mobScanCellsSize">
@@ -1191,7 +1259,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>mobScanCellsSize</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.96">mobScanCellsSize</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.100">mobScanCellsSize</a></pre>
 </li>
 </ul>
 <a name="mobFileCacheAccessCount">
@@ -1200,7 +1268,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFileCacheAccessCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.97">mobFileCacheAccessCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.101">mobFileCacheAccessCount</a></pre>
 </li>
 </ul>
 <a name="mobFileCacheMissCount">
@@ -1209,7 +1277,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFileCacheMissCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.98">mobFileCacheMissCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.102">mobFileCacheMissCount</a></pre>
 </li>
 </ul>
 <a name="mobFileCacheHitRatio">
@@ -1218,7 +1286,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFileCacheHitRatio</h4>
-<pre>private volatile&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.99">mobFileCacheHitRatio</a></pre>
+<pre>private volatile&nbsp;double <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.103">mobFileCacheHitRatio</a></pre>
 </li>
 </ul>
 <a name="mobFileCacheEvictedCount">
@@ -1227,7 +1295,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFileCacheEvictedCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.100">mobFileCacheEvictedCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.104">mobFileCacheEvictedCount</a></pre>
 </li>
 </ul>
 <a name="mobFileCacheCount">
@@ -1236,7 +1304,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFileCacheCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.101">mobFileCacheCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.105">mobFileCacheCount</a></pre>
 </li>
 </ul>
 <a name="blockedRequestsCount">
@@ -1245,7 +1313,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>blockedRequestsCount</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.102">blockedRequestsCount</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.106">blockedRequestsCount</a></pre>
 </li>
 </ul>
 <a name="cacheStats">
@@ -1254,7 +1322,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheStats</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.104">cacheStats</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.108">cacheStats</a></pre>
 </li>
 </ul>
 <a name="executor">
@@ -1263,7 +1331,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>executor</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.105">executor</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.109">executor</a></pre>
 </li>
 </ul>
 <a name="runnable">
@@ -1272,7 +1340,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>runnable</h4>
-<pre>private&nbsp;<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> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.106">runnable</a></pre>
+<pre>private&nbsp;<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> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.110">runnable</a></pre>
 </li>
 </ul>
 <a name="period">
@@ -1281,7 +1349,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>period</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.107">period</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.111">period</a></pre>
 </li>
 </ul>
 <a name="dfsHedgedReadMetrics">
@@ -1290,7 +1358,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockListLast">
 <li class="blockList">
 <h4>dfsHedgedReadMetrics</h4>
-<pre>private&nbsp;org.apache.hadoop.hdfs.DFSHedgedReadMetrics <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.112">dfsHedgedReadMetrics</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hdfs.DFSHedgedReadMetrics <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.116">dfsHedgedReadMetrics</a></pre>
 <div class="block">Can be null if not on hdfs.</div>
 </li>
 </ul>
@@ -1308,7 +1376,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetricsRegionServerWrapperImpl</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.114">MetricsRegionServerWrapperImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;regionServer)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.118">MetricsRegionServerWrapperImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;regionServer)</pre>
 </li>
 </ul>
 </li>
@@ -1325,7 +1393,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>initBlockCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.144">initBlockCache</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.148">initBlockCache</a>()</pre>
 <div class="block">It's possible that due to threading the block cache could not be initialized
  yet (testing multiple region servers in one jvm).  So we need to try and initialize
  the blockCache and cacheStats reference multiple times until we succeed.</div>
@@ -1337,7 +1405,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>initMobFileCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.158">initMobFileCache</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.162">initMobFileCache</a>()</pre>
 <div class="block">Initializes the mob file cache.</div>
 </li>
 </ul>
@@ -1347,7 +1415,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterId</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/regionserver/MetricsRegionServerWrapperImpl.html#line.166">getClusterId</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/regionserver/MetricsRegionServerWrapperImpl.html#line.170">getClusterId</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getClusterId()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the Cluster ID</div>
 <dl>
@@ -1362,7 +1430,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartCode</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.171">getStartCode</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.175">getStartCode</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getStartCode()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get HRegionServer start time</div>
 <dl>
@@ -1377,7 +1445,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getZookeeperQuorum</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/regionserver/MetricsRegionServerWrapperImpl.html#line.176">getZookeeperQuorum</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/regionserver/MetricsRegionServerWrapperImpl.html#line.180">getZookeeperQuorum</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getZookeeperQuorum()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the Zookeeper Quorum Info</div>
 <dl>
@@ -1392,7 +1460,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessors</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/regionserver/MetricsRegionServerWrapperImpl.html#line.185">getCoprocessors</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/regionserver/MetricsRegionServerWrapperImpl.html#line.189">getCoprocessors</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCoprocessors()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the co-processors</div>
 <dl>
@@ -1407,7 +1475,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getServerName</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/regionserver/MetricsRegionServerWrapperImpl.html#line.194">getServerName</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/regionserver/MetricsRegionServerWrapperImpl.html#line.198">getServerName</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getServerName()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get ServerName</div>
 <dl>
@@ -1422,7 +1490,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumOnlineRegions</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.203">getNumOnlineRegions</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.207">getNumOnlineRegions</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumOnlineRegions()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">The number of online regions</div>
 <dl>
@@ -1437,7 +1505,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalRequestCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.212">getTotalRequestCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.216">getTotalRequestCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getTotalRequestCount()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the total number of requests per second.</div>
 <dl>
@@ -1452,7 +1520,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitQueueSize</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.217">getSplitQueueSize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.221">getSplitQueueSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getSplitQueueSize()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the size of the split queue</div>
 <dl>
@@ -1467,7 +1535,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionQueueSize</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.225">getCompactionQueueSize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.229">getCompactionQueueSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getCompactionQueueSize()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the size of the compaction queue</div>
 <dl>
@@ -1482,7 +1550,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getSmallCompactionQueueSize</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.234">getSmallCompactionQueueSize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.238">getSmallCompactionQueueSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getSmallCompactionQueueSize()">getSmallCompactionQueueSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></code></dd>
@@ -1495,7 +1563,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getLargeCompactionQueueSize</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.243">getLargeCompactionQueueSize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.247">getLargeCompactionQueueSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getLargeCompactionQueueSize()">getLargeCompactionQueueSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></code></dd>
@@ -1508,7 +1576,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushQueueSize</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.252">getFlushQueueSize</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.256">getFlushQueueSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getFlushQueueSize()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the size of the flush queue.</div>
 <dl>
@@ -1523,7 +1591,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.261">getBlockCacheCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.265">getBlockCacheCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheCount()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the number of items in the block cache.</div>
 <dl>
@@ -1538,7 +1606,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.269">getBlockCacheSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.273">getBlockCacheSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheSize()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the total size (in bytes) of the block cache.</div>
 <dl>
@@ -1553,7 +1621,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheFreeSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.277">getBlockCacheFreeSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.281">getBlockCacheFreeSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheFreeSize()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the size (in bytes) of the block cache that is free.</div>
 <dl>
@@ -1568,7 +1636,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.285">getBlockCacheHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.289">getBlockCacheHitCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheHitCount()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the count of hits to the block cache</div>
 <dl>
@@ -1583,7 +1651,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCachePrimaryHitCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.293">getBlockCachePrimaryHitCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.297">getBlockCachePrimaryHitCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCachePrimaryHitCount()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the count of hits to primary replica in the block cache</div>
 <dl>
@@ -1598,7 +1666,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.301">getBlockCacheMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.305">getBlockCacheMissCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheMissCount()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the count of misses to the block cache.</div>
 <dl>
@@ -1613,7 +1681,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCachePrimaryMissCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.309">getBlockCachePrimaryMissCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.313">getBlockCachePrimaryMissCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCachePrimaryMissCount()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the count of misses to primary replica in the block cache.</div>
 <dl>
@@ -1628,7 +1696,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheEvictedCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.317">getBlockCacheEvictedCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.321">getBlockCacheEvictedCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheEvictedCount()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the number of items evicted from the block cache.</div>
 <dl>
@@ -1643,7 +1711,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCachePrimaryEvictedCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.325">getBlockCachePrimaryEvictedCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.329">getBlockCachePrimaryEvictedCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCachePrimaryEvictedCount()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the number of items evicted from primary replica in the block cache.</div>
 <dl>
@@ -1658,7 +1726,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheHitPercent</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.333">getBlockCacheHitPercent</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.337">getBlockCacheHitPercent</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheHitPercent()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the percent of all requests that hit the block cache.</div>
 <dl>
@@ -1673,7 +1741,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheHitCachingPercent</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.345">getBlockCacheHitCachingPercent</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.349">getBlockCacheHitCachingPercent</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheHitCachingPercent()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the percent of requests with the block cache turned on that hit the block cache.</div>
 <dl>
@@ -1688,7 +1756,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCacheFailedInsertions</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.359">getBlockCacheFailedInsertions</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.363">getBlockCacheFailedInsertions</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getBlockCacheFailedInsertions()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Number of cache insertions that failed.</div>
 <dl>
@@ -1703,7 +1771,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>forceRecompute</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.363">forceRecompute</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.367">forceRecompute</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#forceRecompute()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Force a re-computation of the metrics.</div>
 <dl>
@@ -1718,7 +1786,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumStores</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.368">getNumStores</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.372">getNumStores</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumStores()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the number of stores hosted on this region server.</div>
 <dl>
@@ -1733,7 +1801,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumWALFiles</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.373">getNumWALFiles</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.377">getNumWALFiles</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumWALFiles()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the number of WAL files of this region server.</div>
 <dl>
@@ -1748,7 +1816,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALFileSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.378">getWALFileSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.382">getWALFileSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getWALFileSize()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the size of WAL files of this region server.</div>
 <dl>
@@ -1763,7 +1831,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumWALSlowAppend</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.383">getNumWALSlowAppend</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.387">getNumWALSlowAppend</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumWALSlowAppend()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the number of WAL files with slow appends for this region server.</div>
 <dl>
@@ -1778,7 +1846,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumStoreFiles</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.388">getNumStoreFiles</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.392">getNumStoreFiles</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getNumStoreFiles()">MetricsRegionServerWrapper</a></code></strong></div>
 <div class="block">Get the number of store files hosted on this region server.</div>
 <dl>
@@ -1787,13 +1855,65 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsR
 </dl>
 </li>
 </ul>
+<a name="getMaxStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMaxStoreFileAge</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.397">getMaxStoreFileAge</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMaxStoreFileAge()">getMaxStoreFileAge</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Max age of store files hosted on this region server</dd></dl>
+</li>
+</ul>
+<a name="getMinStoreFileAge()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMinStoreFileAge</h4>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html#line.402">getMinStoreFileAge</a>()</pre>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html#getMinStoreFileAge()">getMinStoreFileAge</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapper.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapper</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>Min age of store files ho

<TRUNCATED>