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

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

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site 95b5168b3 -> 9e6e3360a


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html
new file mode 100644
index 0000000..59b1c7c
--- /dev/null
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
+<span class="sourceLineNo">009</span> *<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *<a name="line.11"></a>
+<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
+<span class="sourceLineNo">017</span> */<a name="line.17"></a>
+<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.util;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import static org.junit.Assert.assertEquals;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import static org.junit.Assert.assertFalse;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import static org.junit.Assert.assertTrue;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.nio.ByteBuffer;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.junit.Test;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.junit.experimental.categories.Category;<a name="line.31"></a>
+<span class="sourceLineNo">032</span><a name="line.32"></a>
+<span class="sourceLineNo">033</span>@Category({MiscTests.class, SmallTests.class})<a name="line.33"></a>
+<span class="sourceLineNo">034</span>public class TestByteBufferArray {<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>  @Test<a name="line.36"></a>
+<span class="sourceLineNo">037</span>  public void testAsSubBufferWhenEndOffsetLandInLastBuffer() throws Exception {<a name="line.37"></a>
+<span class="sourceLineNo">038</span>    int capacity = 4 * 1024 * 1024;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>    ByteBufferAllocator allocator = new ByteBufferAllocator() {<a name="line.39"></a>
+<span class="sourceLineNo">040</span>      @Override<a name="line.40"></a>
+<span class="sourceLineNo">041</span>      public ByteBuffer allocate(long size, boolean directByteBuffer)<a name="line.41"></a>
+<span class="sourceLineNo">042</span>          throws IOException {<a name="line.42"></a>
+<span class="sourceLineNo">043</span>        if (directByteBuffer) {<a name="line.43"></a>
+<span class="sourceLineNo">044</span>          return ByteBuffer.allocateDirect((int) size);<a name="line.44"></a>
+<span class="sourceLineNo">045</span>        } else {<a name="line.45"></a>
+<span class="sourceLineNo">046</span>          return ByteBuffer.allocate((int) size);<a name="line.46"></a>
+<span class="sourceLineNo">047</span>        }<a name="line.47"></a>
+<span class="sourceLineNo">048</span>      }<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    };<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    ByteBufferArray array = new ByteBufferArray(capacity, false, allocator);<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    ByteBuff subBuf = array.asSubByteBuff(0, capacity);<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    subBuf.position(capacity - 1);// Position to the last byte<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    assertTrue(subBuf.hasRemaining());<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    // Read last byte<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    subBuf.get();<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    assertFalse(subBuf.hasRemaining());<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  }<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>  @Test<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public void testByteBufferCreation() throws Exception {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    int capacity = 470 * 1021 * 1023;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    ByteBufferAllocator allocator = new ByteBufferAllocator() {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      @Override<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      public ByteBuffer allocate(long size, boolean directByteBuffer) throws IOException {<a name="line.64"></a>
+<span class="sourceLineNo">065</span>        if (directByteBuffer) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>          return ByteBuffer.allocateDirect((int) size);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>        } else {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>          return ByteBuffer.allocate((int) size);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>        }<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      }<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    };<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    ByteBufferArray array = new ByteBufferArray(capacity, false, allocator);<a name="line.72"></a>
+<span class="sourceLineNo">073</span>    assertEquals(119, array.buffers.length);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    for (int i = 0; i &lt; array.buffers.length; i++) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>      if (i == array.buffers.length - 1) {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>        assertEquals(array.buffers[i].capacity(), 0);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      } else {<a name="line.77"></a>
+<span class="sourceLineNo">078</span>        assertEquals(array.buffers[i].capacity(), ByteBufferArray.DEFAULT_BUFFER_SIZE);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>      }<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    }<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @Test<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public void testByteBufferCreation1() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    ByteBufferAllocator allocator = new ByteBufferAllocator() {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      @Override<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      public ByteBuffer allocate(long size, boolean directByteBuffer) throws IOException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        if (directByteBuffer) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          return ByteBuffer.allocateDirect((int) size);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        } else {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>          return ByteBuffer.allocate((int) 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>    };<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    ByteBufferArray array = new DummyByteBufferArray(7 * 1024 * 1024, false, allocator);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    // overwrite<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    array.bufferCount = 25;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    array.buffers = new ByteBuffer[array.bufferCount + 1];<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    array.createBuffers(true, allocator);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    for (int i = 0; i &lt; array.buffers.length; i++) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      if (i == array.buffers.length - 1) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        assertEquals(array.buffers[i].capacity(), 0);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      } else {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        assertEquals(array.buffers[i].capacity(), 458752);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      }<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><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  private static class DummyByteBufferArray extends ByteBufferArray {<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public DummyByteBufferArray(long capacity, boolean directByteBuffer,<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        ByteBufferAllocator allocator) throws IOException {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      super(capacity, directByteBuffer, allocator);<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>    @Override<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    int getThreadCount() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      return 16;<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>}<a name="line.121"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html
index 6112641..59b1c7c 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html
@@ -87,7 +87,46 @@
 <span class="sourceLineNo">079</span>      }<a name="line.79"></a>
 <span class="sourceLineNo">080</span>    }<a name="line.80"></a>
 <span class="sourceLineNo">081</span>  }<a name="line.81"></a>
-<span class="sourceLineNo">082</span>}<a name="line.82"></a>
+<span class="sourceLineNo">082</span><a name="line.82"></a>
+<span class="sourceLineNo">083</span>  @Test<a name="line.83"></a>
+<span class="sourceLineNo">084</span>  public void testByteBufferCreation1() throws Exception {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    ByteBufferAllocator allocator = new ByteBufferAllocator() {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      @Override<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      public ByteBuffer allocate(long size, boolean directByteBuffer) throws IOException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        if (directByteBuffer) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          return ByteBuffer.allocateDirect((int) size);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        } else {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>          return ByteBuffer.allocate((int) 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>    };<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    ByteBufferArray array = new DummyByteBufferArray(7 * 1024 * 1024, false, allocator);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    // overwrite<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    array.bufferCount = 25;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    array.buffers = new ByteBuffer[array.bufferCount + 1];<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    array.createBuffers(true, allocator);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    for (int i = 0; i &lt; array.buffers.length; i++) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      if (i == array.buffers.length - 1) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        assertEquals(array.buffers[i].capacity(), 0);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      } else {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>        assertEquals(array.buffers[i].capacity(), 458752);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      }<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><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  private static class DummyByteBufferArray extends ByteBufferArray {<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>    public DummyByteBufferArray(long capacity, boolean directByteBuffer,<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        ByteBufferAllocator allocator) throws IOException {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      super(capacity, directByteBuffer, allocator);<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>    @Override<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    int getThreadCount() {<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      return 16;<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>}<a name="line.121"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
index c6abfe5..3734517 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
@@ -29,406 +29,420 @@
 <span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertFalse;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.junit.Assert.assertTrue;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.lang.management.ManagementFactory;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.lang.management.MemoryUsage;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.nio.ByteBuffer;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.Path;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HConstants;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.junit.After;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.Before;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.Test;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.experimental.categories.Category;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * Tests that {@link CacheConfig} does as expected.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>// This test is marked as a large test though it runs in a short amount of time<a name="line.56"></a>
-<span class="sourceLineNo">057</span>// (seconds).  It is large because it depends on being able to reset the global<a name="line.57"></a>
-<span class="sourceLineNo">058</span>// blockcache instance which is in a global variable.  Experience has it that<a name="line.58"></a>
-<span class="sourceLineNo">059</span>// tests clash on the global variable if this test is run as small sized test.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>@Category({IOTests.class, LargeTests.class})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class TestCacheConfig {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final Log LOG = LogFactory.getLog(TestCacheConfig.class);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private Configuration conf;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  static class Deserializer implements CacheableDeserializer&lt;Cacheable&gt; {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    private final Cacheable cacheable;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    private int deserializedIdentifier = 0;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>    Deserializer(final Cacheable c) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      deserializedIdentifier = CacheableDeserializerIdManager.registerDeserializer(this);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      this.cacheable = c;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>    @Override<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    public int getDeserialiserIdentifier() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return deserializedIdentifier;<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>    @Override<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    public Cacheable deserialize(ByteBuff b, boolean reuse, MemoryType memType) throws IOException {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      LOG.info("Deserialized " + b + ", reuse=" + reuse);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      return cacheable;<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 Cacheable deserialize(ByteBuff b) throws IOException {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      LOG.info("Deserialized " + b);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      return cacheable;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  };<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  static class IndexCacheEntry extends DataCacheEntry {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    private static IndexCacheEntry SINGLETON = new IndexCacheEntry();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    public IndexCacheEntry() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      super(SINGLETON);<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 BlockType getBlockType() {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      return BlockType.ROOT_INDEX;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  static class DataCacheEntry implements Cacheable {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    private static final int SIZE = 1;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    private static DataCacheEntry SINGLETON = new DataCacheEntry();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    final CacheableDeserializer&lt;Cacheable&gt; deserializer;<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>    DataCacheEntry() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      this(SINGLETON);<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>    DataCacheEntry(final Cacheable c) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      this.deserializer = new Deserializer(c);<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 String toString() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return "size=" + SIZE + ", type=" + getBlockType();<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 heapSize() {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return SIZE;<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 int getSerializedLength() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      return SIZE;<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 void serialize(ByteBuffer destination) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.info("Serialized " + this + " to " + destination);<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 CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      return this.deserializer;<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 BlockType getBlockType() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return BlockType.DATA;<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 MemoryType getMemoryType() {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return MemoryType.EXCLUSIVE;<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>  static class MetaCacheEntry extends DataCacheEntry {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public BlockType getBlockType() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return BlockType.INTERMEDIATE_INDEX;<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><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Before<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void setUp() throws Exception {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    CacheConfig.clearGlobalInstances();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.conf = HBaseConfiguration.create();<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>  @After<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public void tearDown() throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    // Let go of current block cache.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    CacheConfig.clearGlobalInstances();<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 name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param cc<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param doubling If true, addition of element ups counter by 2, not 1, because element added<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * to onheap and offheap caches.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param sizing True if we should run sizing test (doesn't always apply).<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  void basicBlockCacheOps(final CacheConfig cc, final boolean doubling,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean sizing) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    BlockCache bc = cc.getBlockCache();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    BlockCacheKey bck = new BlockCacheKey("f", 0);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    Cacheable c = new DataCacheEntry();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // Do asserts on block counting.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    long initialBlockCount = bc.getBlockCount();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    assertEquals(doubling? 2: 1, bc.getBlockCount() - initialBlockCount);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    bc.evictBlock(bck);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertEquals(initialBlockCount, bc.getBlockCount());<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // Do size accounting.  Do it after the above 'warm-up' because it looks like some<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    // buffers do lazy allocation so sizes are off on first go around.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (sizing) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      long originalSize = bc.getCurrentSize();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      assertTrue(bc.getCurrentSize() &gt; originalSize);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      bc.evictBlock(bck);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      long size = bc.getCurrentSize();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      assertEquals(originalSize, size);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param cc<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param filename<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  private long cacheDataBlock(final CacheConfig cc, final String filename) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    BlockCacheKey bck = new BlockCacheKey(filename, 0);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    Cacheable c = new DataCacheEntry();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // Do asserts on block counting.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    cc.getBlockCache().cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return cc.getBlockCache().getBlockCount();<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>  @Test<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public void testDisableCacheDataBlock() throws IOException {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    Configuration conf = HBaseConfiguration.create();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    CacheConfig cacheConfig = new CacheConfig(conf);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    assertFalse(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    assertFalse(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, true);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    conf.setBoolean(CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY, true);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    conf.setBoolean(CacheConfig.CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    conf.setBoolean(CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY, true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>    cacheConfig = new CacheConfig(conf);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    assertTrue(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertTrue(cacheConfig.shouldCacheDataCompressed());<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    assertTrue(cacheConfig.shouldCacheDataOnWrite());<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, false);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    cacheConfig = new CacheConfig(conf);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, true);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    HColumnDescriptor family = new HColumnDescriptor("testDisableCacheDataBlock");<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    family.setBlockCacheEnabled(false);<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    cacheConfig = new CacheConfig(conf, family);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  @Test<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public void testCacheConfigDefaultLRUBlockCache() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    basicBlockCacheOps(cc, false, true);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<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>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  @Test<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public void testOffHeapBucketCacheConfig() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  public void testOnHeapBucketCacheConfig() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "heap");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  public void testFileBucketCacheConfig() throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    HBaseTestingUtility htu = new HBaseTestingUtility(this.conf);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    try {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      Path p = new Path(htu.getDataTestDir(), "bc.txt");<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      FileSystem fs = FileSystem.get(this.conf);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      fs.create(p).close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "file:" + p);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      doBucketCacheConfigTest();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    } finally {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      htu.cleanupTestDir();<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>  private void doBucketCacheConfigTest() {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final int bcSize = 100;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    basicBlockCacheOps(cc, false, false);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    BlockCache [] bcs = cbc.getBlockCaches();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    assertTrue(bcs[0] instanceof LruBlockCache);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LruBlockCache lbc = (LruBlockCache)bcs[0];<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    assertEquals(MemorySizeUtil.getLruCacheSize(this.conf), lbc.getMaxSize());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    assertTrue(bcs[1] instanceof BucketCache);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    BucketCache bc = (BucketCache)bcs[1];<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    assertEquals(bcSize, bc.getMaxSize() / (1024 * 1024));<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>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * LruBlockCache as L1 with a BucketCache for L2.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  @Test (timeout=10000)<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  public void testBucketCacheConfigL1L2Setup() {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Make lru size is smaller than bcSize for sure.  Need this to be true so when eviction<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    // from L1 happens, it does not fail because L2 can't take the eviction because block too big.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    this.conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.001f);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    long lruExpectedSize = MemorySizeUtil.getLruCacheSize(this.conf);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    final int bcSize = 100;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    long bcExpectedSize = 100 * 1024 * 1024; // MB.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    assertTrue(lruExpectedSize &lt; bcExpectedSize);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    this.conf.setBoolean(CacheConfig.BUCKET_CACHE_COMBINED_KEY, false);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    basicBlockCacheOps(cc, false, false);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    LruBlockCache lbc = (LruBlockCache)cc.getBlockCache();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    assertEquals(lruExpectedSize, lbc.getMaxSize());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    BlockCache bc = lbc.getVictimHandler();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    assertEquals(bcExpectedSize, ((BucketCache) bc).getMaxSize());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // Test the L1+L2 deploy works as we'd expect with blocks evicted from L1 going to L2.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    long initialL1BlockCount = lbc.getBlockCount();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    long initialL2BlockCount = bc.getBlockCount();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    Cacheable c = new DataCacheEntry();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    BlockCacheKey bck = new BlockCacheKey("bck", 0);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    lbc.cacheBlock(bck, c, false, false);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    assertEquals(initialL1BlockCount + 1, lbc.getBlockCount());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    assertEquals(initialL2BlockCount, bc.getBlockCount());<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // Force evictions by putting in a block too big.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    final long justTooBigSize = lbc.acceptableSize() + 1;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    lbc.cacheBlock(new BlockCacheKey("bck2", 0), new DataCacheEntry() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      @Override<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      public long heapSize() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        return justTooBigSize;<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 int getSerializedLength() {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        return (int)heapSize();<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>    // The eviction thread in lrublockcache needs to run.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    while (initialL1BlockCount != lbc.getBlockCount()) Threads.sleep(10);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    assertEquals(initialL1BlockCount, lbc.getBlockCount());<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    long count = bc.getBlockCount();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    assertTrue(initialL2BlockCount + 1 &lt;= count);<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>   * Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * LruBlockCache when using CombinedBlockCcahe.<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Test<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public void testCacheDataInL1() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, 100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    // Add a data block.  Should go into L2, into the Bucket Cache, not the LruBlockCache.<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    cacheDataBlock(cc, "1");<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    LruBlockCache lrubc = (LruBlockCache)cbc.getBlockCaches()[0];<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    assertDataBlockCount(lrubc, 0);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // Enable our test flag.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    cc.setCacheDataInL1(true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    cacheDataBlock(cc, "2");<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    assertDataBlockCount(lrubc, 1);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    cc.setCacheDataInL1(false);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    cacheDataBlock(cc, "3");<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    assertDataBlockCount(lrubc, 1);<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>  private void assertDataBlockCount(final LruBlockCache bc, final int expected) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Map&lt;BlockType, Integer&gt; blocks = bc.getBlockTypeCountsForTest();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    assertEquals(expected, blocks == null? 0:<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      blocks.get(BlockType.DATA) == null? 0:<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      blocks.get(BlockType.DATA).intValue());<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>}<a name="line.423"></a>
+<span class="sourceLineNo">024</span>import static org.junit.Assert.fail;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.lang.management.ManagementFactory;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.lang.management.MemoryUsage;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.nio.ByteBuffer;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FileSystem;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.fs.Path;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.After;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.Before;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>/**<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * Tests that {@link CacheConfig} does as expected.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>// This test is marked as a large test though it runs in a short amount of time<a name="line.57"></a>
+<span class="sourceLineNo">058</span>// (seconds).  It is large because it depends on being able to reset the global<a name="line.58"></a>
+<span class="sourceLineNo">059</span>// blockcache instance which is in a global variable.  Experience has it that<a name="line.59"></a>
+<span class="sourceLineNo">060</span>// tests clash on the global variable if this test is run as small sized test.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>@Category({IOTests.class, LargeTests.class})<a name="line.61"></a>
+<span class="sourceLineNo">062</span>public class TestCacheConfig {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final Log LOG = LogFactory.getLog(TestCacheConfig.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private Configuration conf;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  static class Deserializer implements CacheableDeserializer&lt;Cacheable&gt; {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    private final Cacheable cacheable;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    private int deserializedIdentifier = 0;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>    Deserializer(final Cacheable c) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      deserializedIdentifier = CacheableDeserializerIdManager.registerDeserializer(this);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      this.cacheable = c;<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>    @Override<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    public int getDeserialiserIdentifier() {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      return deserializedIdentifier;<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 Cacheable deserialize(ByteBuff b, boolean reuse, MemoryType memType) throws IOException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      LOG.info("Deserialized " + b + ", reuse=" + reuse);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      return cacheable;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    @Override<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    public Cacheable deserialize(ByteBuff b) throws IOException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      LOG.info("Deserialized " + b);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      return cacheable;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  };<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  static class IndexCacheEntry extends DataCacheEntry {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    private static IndexCacheEntry SINGLETON = new IndexCacheEntry();<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    public IndexCacheEntry() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      super(SINGLETON);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    @Override<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public BlockType getBlockType() {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      return BlockType.ROOT_INDEX;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  static class DataCacheEntry implements Cacheable {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    private static final int SIZE = 1;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    private static DataCacheEntry SINGLETON = new DataCacheEntry();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    final CacheableDeserializer&lt;Cacheable&gt; deserializer;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>    DataCacheEntry() {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      this(SINGLETON);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>    DataCacheEntry(final Cacheable c) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      this.deserializer = new Deserializer(c);<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 String toString() {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      return "size=" + SIZE + ", type=" + getBlockType();<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 heapSize() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      return SIZE;<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 int getSerializedLength() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return SIZE;<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 void serialize(ByteBuffer destination) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.info("Serialized " + this + " to " + destination);<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 CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      return this.deserializer;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    public BlockType getBlockType() {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      return BlockType.DATA;<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 MemoryType getMemoryType() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return MemoryType.EXCLUSIVE;<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>  static class MetaCacheEntry extends DataCacheEntry {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public BlockType getBlockType() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return BlockType.INTERMEDIATE_INDEX;<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><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Before<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void setUp() throws Exception {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    CacheConfig.clearGlobalInstances();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.conf = HBaseConfiguration.create();<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>  @After<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public void tearDown() throws Exception {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // Let go of current block cache.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    CacheConfig.clearGlobalInstances();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @param cc<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * @param doubling If true, addition of element ups counter by 2, not 1, because element added<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * to onheap and offheap caches.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @param sizing True if we should run sizing test (doesn't always apply).<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  void basicBlockCacheOps(final CacheConfig cc, final boolean doubling,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean sizing) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    BlockCache bc = cc.getBlockCache();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    BlockCacheKey bck = new BlockCacheKey("f", 0);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    Cacheable c = new DataCacheEntry();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // Do asserts on block counting.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    long initialBlockCount = bc.getBlockCount();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    assertEquals(doubling? 2: 1, bc.getBlockCount() - initialBlockCount);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    bc.evictBlock(bck);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertEquals(initialBlockCount, bc.getBlockCount());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // Do size accounting.  Do it after the above 'warm-up' because it looks like some<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // buffers do lazy allocation so sizes are off on first go around.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (sizing) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      long originalSize = bc.getCurrentSize();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      assertTrue(bc.getCurrentSize() &gt; originalSize);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      bc.evictBlock(bck);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      long size = bc.getCurrentSize();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      assertEquals(originalSize, size);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  /**<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param cc<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param filename<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * @return<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  private long cacheDataBlock(final CacheConfig cc, final String filename) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    BlockCacheKey bck = new BlockCacheKey(filename, 0);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    Cacheable c = new DataCacheEntry();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // Do asserts on block counting.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    cc.getBlockCache().cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    return cc.getBlockCache().getBlockCount();<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>  @Test<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public void testDisableCacheDataBlock() throws IOException {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    Configuration conf = HBaseConfiguration.create();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    CacheConfig cacheConfig = new CacheConfig(conf);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    assertFalse(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertFalse(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, true);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    conf.setBoolean(CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY, true);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    conf.setBoolean(CacheConfig.CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, true);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    conf.setBoolean(CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY, true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    cacheConfig = new CacheConfig(conf);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    assertTrue(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertTrue(cacheConfig.shouldCacheDataCompressed());<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assertTrue(cacheConfig.shouldCacheDataOnWrite());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, false);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>    cacheConfig = new CacheConfig(conf);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, true);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    HColumnDescriptor family = new HColumnDescriptor("testDisableCacheDataBlock");<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    family.setBlockCacheEnabled(false);<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    cacheConfig = new CacheConfig(conf, family);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<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>  @Test<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public void testCacheConfigDefaultLRUBlockCache() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    basicBlockCacheOps(cc, false, true);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<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>  /**<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @Test<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public void testOffHeapBucketCacheConfig() {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public void testOnHeapBucketCacheConfig() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "heap");<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public void testFileBucketCacheConfig() throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    HBaseTestingUtility htu = new HBaseTestingUtility(this.conf);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      Path p = new Path(htu.getDataTestDir(), "bc.txt");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      FileSystem fs = FileSystem.get(this.conf);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      fs.create(p).close();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "file:" + p);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      doBucketCacheConfigTest();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } finally {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      htu.cleanupTestDir();<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>  private void doBucketCacheConfigTest() {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    final int bcSize = 100;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    basicBlockCacheOps(cc, false, false);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    BlockCache [] bcs = cbc.getBlockCaches();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    assertTrue(bcs[0] instanceof LruBlockCache);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LruBlockCache lbc = (LruBlockCache)bcs[0];<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    assertEquals(MemorySizeUtil.getLruCacheSize(this.conf), lbc.getMaxSize());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    assertTrue(bcs[1] instanceof BucketCache);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    BucketCache bc = (BucketCache)bcs[1];<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    assertEquals(bcSize, bc.getMaxSize() / (1024 * 1024));<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * LruBlockCache as L1 with a BucketCache for L2.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  @Test (timeout=10000)<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public void testBucketCacheConfigL1L2Setup() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Make lru size is smaller than bcSize for sure.  Need this to be true so when eviction<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    // from L1 happens, it does not fail because L2 can't take the eviction because block too big.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    this.conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.001f);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    long lruExpectedSize = MemorySizeUtil.getLruCacheSize(this.conf);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    final int bcSize = 100;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    long bcExpectedSize = 100 * 1024 * 1024; // MB.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    assertTrue(lruExpectedSize &lt; bcExpectedSize);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    this.conf.setBoolean(CacheConfig.BUCKET_CACHE_COMBINED_KEY, false);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    basicBlockCacheOps(cc, false, false);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    LruBlockCache lbc = (LruBlockCache)cc.getBlockCache();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    assertEquals(lruExpectedSize, lbc.getMaxSize());<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    BlockCache bc = lbc.getVictimHandler();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    assertEquals(bcExpectedSize, ((BucketCache) bc).getMaxSize());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    // Test the L1+L2 deploy works as we'd expect with blocks evicted from L1 going to L2.<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    long initialL1BlockCount = lbc.getBlockCount();<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    long initialL2BlockCount = bc.getBlockCount();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    Cacheable c = new DataCacheEntry();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    BlockCacheKey bck = new BlockCacheKey("bck", 0);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    lbc.cacheBlock(bck, c, false, false);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    assertEquals(initialL1BlockCount + 1, lbc.getBlockCount());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertEquals(initialL2BlockCount, bc.getBlockCount());<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // Force evictions by putting in a block too big.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    final long justTooBigSize = lbc.acceptableSize() + 1;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    lbc.cacheBlock(new BlockCacheKey("bck2", 0), new DataCacheEntry() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      @Override<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      public long heapSize() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        return justTooBigSize;<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 int getSerializedLength() {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        return (int)heapSize();<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>    // The eviction thread in lrublockcache needs to run.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    while (initialL1BlockCount != lbc.getBlockCount()) Threads.sleep(10);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    assertEquals(initialL1BlockCount, lbc.getBlockCount());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    long count = bc.getBlockCount();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    assertTrue(initialL2BlockCount + 1 &lt;= count);<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * LruBlockCache when using CombinedBlockCcahe.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Test<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public void testCacheDataInL1() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, 100);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    // Add a data block.  Should go into L2, into the Bucket Cache, not the LruBlockCache.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    cacheDataBlock(cc, "1");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    LruBlockCache lrubc = (LruBlockCache)cbc.getBlockCaches()[0];<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    assertDataBlockCount(lrubc, 0);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // Enable our test flag.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    cc.setCacheDataInL1(true);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    cacheDataBlock(cc, "2");<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    assertDataBlockCount(lrubc, 1);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    cc.setCacheDataInL1(false);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    cacheDataBlock(cc, "3");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    assertDataBlockCount(lrubc, 1);<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>  @Test<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  public void testL2CacheWithInvalidBucketSize() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    Configuration c = new Configuration(this.conf);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    c.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    c.set(CacheConfig.BUCKET_CACHE_BUCKETS_KEY, "256,512,1024,2048,4000,4096");<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    c.setFloat(HConstants.BUCKET_CACHE_SIZE_KEY, 1024);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    try {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      CacheConfig.getL2(c);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      fail("Should throw IllegalArgumentException when passing illegal value for bucket size");<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    } catch (IllegalArgumentException e) {<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><a name="line.430"></a>
+<span class="sourceLineNo">431</span>  private void assertDataBlockCount(final LruBlockCache bc, final int expected) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Map&lt;BlockType, Integer&gt; blocks = bc.getBlockTypeCountsForTest();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    assertEquals(expected, blocks == null? 0:<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      blocks.get(BlockType.DATA) == null? 0:<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      blocks.get(BlockType.DATA).intValue());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>}<a name="line.437"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
index c6abfe5..3734517 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
@@ -29,406 +29,420 @@
 <span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertFalse;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.junit.Assert.assertTrue;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.lang.management.ManagementFactory;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.lang.management.MemoryUsage;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.nio.ByteBuffer;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.Path;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HConstants;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.junit.After;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.Before;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.Test;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.experimental.categories.Category;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * Tests that {@link CacheConfig} does as expected.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>// This test is marked as a large test though it runs in a short amount of time<a name="line.56"></a>
-<span class="sourceLineNo">057</span>// (seconds).  It is large because it depends on being able to reset the global<a name="line.57"></a>
-<span class="sourceLineNo">058</span>// blockcache instance which is in a global variable.  Experience has it that<a name="line.58"></a>
-<span class="sourceLineNo">059</span>// tests clash on the global variable if this test is run as small sized test.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>@Category({IOTests.class, LargeTests.class})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class TestCacheConfig {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final Log LOG = LogFactory.getLog(TestCacheConfig.class);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private Configuration conf;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  static class Deserializer implements CacheableDeserializer&lt;Cacheable&gt; {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    private final Cacheable cacheable;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    private int deserializedIdentifier = 0;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>    Deserializer(final Cacheable c) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      deserializedIdentifier = CacheableDeserializerIdManager.registerDeserializer(this);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      this.cacheable = c;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>    @Override<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    public int getDeserialiserIdentifier() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return deserializedIdentifier;<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>    @Override<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    public Cacheable deserialize(ByteBuff b, boolean reuse, MemoryType memType) throws IOException {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      LOG.info("Deserialized " + b + ", reuse=" + reuse);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      return cacheable;<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 Cacheable deserialize(ByteBuff b) throws IOException {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      LOG.info("Deserialized " + b);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      return cacheable;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  };<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  static class IndexCacheEntry extends DataCacheEntry {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    private static IndexCacheEntry SINGLETON = new IndexCacheEntry();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    public IndexCacheEntry() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      super(SINGLETON);<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 BlockType getBlockType() {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      return BlockType.ROOT_INDEX;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  static class DataCacheEntry implements Cacheable {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    private static final int SIZE = 1;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    private static DataCacheEntry SINGLETON = new DataCacheEntry();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    final CacheableDeserializer&lt;Cacheable&gt; deserializer;<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>    DataCacheEntry() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      this(SINGLETON);<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>    DataCacheEntry(final Cacheable c) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      this.deserializer = new Deserializer(c);<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 String toString() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return "size=" + SIZE + ", type=" + getBlockType();<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 heapSize() {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return SIZE;<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 int getSerializedLength() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      return SIZE;<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 void serialize(ByteBuffer destination) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.info("Serialized " + this + " to " + destination);<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 CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      return this.deserializer;<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 BlockType getBlockType() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return BlockType.DATA;<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 MemoryType getMemoryType() {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return MemoryType.EXCLUSIVE;<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>  static class MetaCacheEntry extends DataCacheEntry {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public BlockType getBlockType() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return BlockType.INTERMEDIATE_INDEX;<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><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Before<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void setUp() throws Exception {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    CacheConfig.clearGlobalInstances();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.conf = HBaseConfiguration.create();<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>  @After<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public void tearDown() throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    // Let go of current block cache.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    CacheConfig.clearGlobalInstances();<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 name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param cc<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param doubling If true, addition of element ups counter by 2, not 1, because element added<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * to onheap and offheap caches.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param sizing True if we should run sizing test (doesn't always apply).<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  void basicBlockCacheOps(final CacheConfig cc, final boolean doubling,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean sizing) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    BlockCache bc = cc.getBlockCache();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    BlockCacheKey bck = new BlockCacheKey("f", 0);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    Cacheable c = new DataCacheEntry();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // Do asserts on block counting.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    long initialBlockCount = bc.getBlockCount();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    assertEquals(doubling? 2: 1, bc.getBlockCount() - initialBlockCount);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    bc.evictBlock(bck);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertEquals(initialBlockCount, bc.getBlockCount());<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // Do size accounting.  Do it after the above 'warm-up' because it looks like some<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    // buffers do lazy allocation so sizes are off on first go around.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (sizing) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      long originalSize = bc.getCurrentSize();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      assertTrue(bc.getCurrentSize() &gt; originalSize);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      bc.evictBlock(bck);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      long size = bc.getCurrentSize();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      assertEquals(originalSize, size);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param cc<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param filename<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  private long cacheDataBlock(final CacheConfig cc, final String filename) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    BlockCacheKey bck = new BlockCacheKey(filename, 0);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    Cacheable c = new DataCacheEntry();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // Do asserts on block counting.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    cc.getBlockCache().cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return cc.getBlockCache().getBlockCount();<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>  @Test<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public void testDisableCacheDataBlock() throws IOException {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    Configuration conf = HBaseConfiguration.create();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    CacheConfig cacheConfig = new CacheConfig(conf);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    assertFalse(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    assertFalse(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, true);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    conf.setBoolean(CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY, true);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    conf.setBoolean(CacheConfig.CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    conf.setBoolean(CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY, true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>    cacheConfig = new CacheConfig(conf);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    assertTrue(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertTrue(cacheConfig.shouldCacheDataCompressed());<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    assertTrue(cacheConfig.shouldCacheDataOnWrite());<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, false);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    cacheConfig = new CacheConfig(conf);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, true);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    HColumnDescriptor family = new HColumnDescriptor("testDisableCacheDataBlock");<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    family.setBlockCacheEnabled(false);<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    cacheConfig = new CacheConfig(conf, family);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  @Test<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public void testCacheConfigDefaultLRUBlockCache() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    basicBlockCacheOps(cc, false, true);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<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>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  @Test<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public void testOffHeapBucketCacheConfig() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  public void testOnHeapBucketCacheConfig() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "heap");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  public void testFileBucketCacheConfig() throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    HBaseTestingUtility htu = new HBaseTestingUtility(this.conf);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    try {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      Path p = new Path(htu.getDataTestDir(), "bc.txt");<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      FileSystem fs = FileSystem.get(this.conf);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      fs.create(p).close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "file:" + p);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      doBucketCacheConfigTest();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    } finally {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      htu.cleanupTestDir();<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>  private void doBucketCacheConfigTest() {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final int bcSize = 100;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    basicBlockCacheOps(cc, false, false);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    BlockCache [] bcs = cbc.getBlockCaches();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    assertTrue(bcs[0] instanceof LruBlockCache);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LruBlockCache lbc = (LruBlockCache)bcs[0];<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    assertEquals(MemorySizeUtil.getLruCacheSize(this.conf), lbc.getMaxSize());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    assertTrue(bcs[1] instanceof BucketCache);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    BucketCache bc = (BucketCache)bcs[1];<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    assertEquals(bcSize, bc.getMaxSize() / (1024 * 1024));<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>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * LruBlockCache as L1 with a BucketCache for L2.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  @Test (timeout=10000)<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  public void testBucketCacheConfigL1L2Setup() {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Make lru size is smaller than bcSize for sure.  Need this to be true so when eviction<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    // from L1 happens, it does not fail because L2 can't take the eviction because block too big.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    this.conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.001f);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    long lruExpectedSize = MemorySizeUtil.getLruCacheSize(this.conf);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    final int bcSize = 100;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    long bcExpectedSize = 100 * 1024 * 1024; // MB.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    assertTrue(lruExpectedSize &lt; bcExpectedSize);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    this.conf.setBoolean(CacheConfig.BUCKET_CACHE_COMBINED_KEY, false);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    basicBlockCacheOps(cc, false, false);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    LruBlockCache lbc = (LruBlockCache)cc.getBlockCache();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    assertEquals(lruExpectedSize, lbc.getMaxSize());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    BlockCache bc = lbc.getVictimHandler();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    assertEquals(bcExpectedSize, ((BucketCache) bc).getMaxSize());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // Test the L1+L2 deploy works as we'd expect with blocks evicted from L1 going to L2.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    long initialL1BlockCount = lbc.getBlockCount();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    long initialL2BlockCount = bc.getBlockCount();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    Cacheable c = new DataCacheEntry();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    BlockCacheKey bck = new BlockCacheKey("bck", 0);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    lbc.cacheBlock(bck, c, false, false);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    assertEquals(initialL1BlockCount + 1, lbc.getBlockCount());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    assertEquals(initialL2BlockCount, bc.getBlockCount());<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // Force evictions by putting in a block too big.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    final long justTooBigSize = lbc.acceptableSize() + 1;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    lbc.cacheBlock(new BlockCacheKey("bck2", 0), new DataCacheEntry() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      @Override<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      public long heapSize() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        return justTooBigSize;<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 int getSerializedLength() {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        return (int)heapSize();<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>    // The eviction thread in lrublockcache needs to run.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    while (initialL1BlockCount != lbc.getBlockCount()) Threads.sleep(10);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    assertEquals(initialL1BlockCount, lbc.getBlockCount());<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    long count = bc.getBlockCount();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    assertTrue(initialL2BlockCount + 1 &lt;= count);<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>   * Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * LruBlockCache when using CombinedBlockCcahe.<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Test<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public void testCacheDataInL1() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, 100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    // Add a data block.  Should go into L2, into the Bucket Cache, not the LruBlockCache.<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    cacheDataBlock(cc, "1");<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    LruBlockCache lrubc = (LruBlockCache)cbc.getBlockCaches()[0];<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    assertDataBlockCount(lrubc, 0);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // Enable our test flag.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    cc.setCacheDataInL1(true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    cacheDataBlock(cc, "2");<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    assertDataBlockCount(lrubc, 1);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    cc.setCacheDataInL1(false);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    cacheDataBlock(cc, "3");<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    assertDataBlockCount(lrubc, 1);<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>  private void assertDataBlockCount(final LruBlockCache bc, final int expected) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Map&lt;BlockType, Integer&gt; blocks = bc.getBlockTypeCountsForTest();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    assertEquals(expected, blocks == null? 0:<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      blocks.get(BlockType.DATA) == null? 0:<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      blocks.get(BlockType.DATA).intValue());<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>}<a name="line.423"></a>
+<span class="sourceLineNo">024</span>import static org.junit.Assert.fail;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.lang.management.ManagementFactory;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.lang.management.MemoryUsage;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.nio.ByteBuffer;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FileSystem;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.fs.Path;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.After;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.Before;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>/**<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * Tests that {@link CacheConfig} does as expected.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>// This test is marked as a large test though it runs in a short amount of time<a name="line.57"></a>
+<span class="sourceLineNo">058</span>// (seconds).  It is large because it depends on being able to reset the global<a name="line.58"></a>
+<span class="sourceLineNo">059</span>// blockcache instance which is in a global variable.  Experience has it that<a name="line.59"></a>
+<span class="sourceLineNo">060</span>// tests clash on the global variable if this test is run as small sized test.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>@Category({IOTests.class, LargeTests.class})<a name="line.61"></a>
+<span class="sourceLineNo">062</span>public class TestCacheConfig {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final Log LOG = LogFactory.getLog(TestCacheConfig.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private Configuration conf;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  static class Deserializer implements CacheableDeserializer&lt;Cacheable&gt; {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    private final Cacheable cacheable;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    private int deserializedIdentifier = 0;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>    Deserializer(final Cacheable c) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      deserializedIdentifier = CacheableDeserializerIdManager.registerDeserializer(this);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      this.cacheable = c;<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>    @Override<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    public int getDeserialiserIdentifier() {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      return deserializedIdentifier;<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 Cacheable deserialize(ByteBuff b, boolean reuse, MemoryType memType) throws IOException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      LOG.info("Deserialized " + b + ", reuse=" + reuse);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      return cacheable;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    @Override<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    public Cacheable deserialize(ByteBuff b) throws IOException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      LOG.info("Deserialized " + b);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      return cacheable;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  };<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  static class IndexCacheEntry extends DataCacheEntry {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    private static IndexCacheEntry SINGLETON = new IndexCacheEntry();<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    public IndexCacheEntry() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      super(SINGLETON);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    @Override<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public BlockType getBlockType() {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      return BlockType.ROOT_INDEX;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  static class DataCacheEntry implements Cacheable {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    private static final int SIZE = 1;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    private static DataCacheEntry SINGLETON = new DataCacheEntry();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    final CacheableDeserializer&lt;Cacheable&gt; deserializer;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>    DataCacheEntry() {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      this(SINGLETON);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>    DataCacheEntry(final Cacheable c) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      this.deserializer = new Deserializer(c);<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 String toString() {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      return "size=" + SIZE + ", type=" + getBlockType();<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 heapSize() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      return SIZE;<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 int getSerializedLength() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return SIZE;<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 void serialize(ByteBuffer destination) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.info("Serialized " + this + " to " + destination);<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 CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      return this.deserializer;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    public BlockType getBlockType() {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      return BlockType.DATA;<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 MemoryType getMemoryType() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return MemoryType.EXCLUSIVE;<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>  static class MetaCacheEntry extends DataCacheEntry {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public BlockType getBlockType() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return BlockType.INTERMEDIATE_INDEX;<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><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Before<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void setUp() throws Exception {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    CacheConfig.clearGlobalInstances();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.conf = HBaseConfiguration.create();<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>  @After<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public void tearDown() throws Exception {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // Let go of current block cache.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    CacheConfig.clearGlobalInstances();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @param cc<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * @param doubling If true, addition of element ups counter by 2, not 1, because element added<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * to onheap and offheap caches.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @param sizing True if we should run sizing test (doesn't always apply).<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  void basicBlockCacheOps(final CacheConfig cc, final boolean doubling,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean sizing) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    BlockCache bc = cc.getBlockCache();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    BlockCacheKey bck = new BlockCacheKey("f", 0);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    Cacheable c = new DataCacheEntry();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // Do asserts on block counting.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    long initialBlockCount = bc.getBlockCount();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    assertEquals(doubling? 2: 1, bc.getBlockCount() - initialBlockCount);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    bc.evictBlock(bck);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertEquals(initialBlockCount, bc.getBlockCount());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // Do size accounting.  Do it after the above 'warm-up' because it looks like some<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // buffers do lazy allocation so sizes are off on first go around.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (sizing) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      long originalSize = bc.getCurrentSize();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      assertTrue(bc.getCurrentSize() &gt; originalSize);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      bc.evictBlock(bck);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      long size = bc.getCurrentSize();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      assertEquals(originalSize, size);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  /**<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param cc<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param filename<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * @return<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  private long cacheDataBlock(final CacheConfig cc, final String filename) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    BlockCacheKey bck = new BlockCacheKey(filename, 0);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    Cacheable c = new DataCacheEntry();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // Do asserts on block counting.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    cc.getBlockCache().cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    return cc.getBlockCache().getBlockCount();<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>  @Test<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public void testDisableCacheDataBlock() throws IOException {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    Configuration conf = HBaseConfiguration.create();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    CacheConfig cacheConfig = new CacheConfig(conf);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    assertFalse(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertFalse(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, true);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    conf.setBoolean(CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY, true);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    conf.setBoolean(CacheConfig.CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, true);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    conf.setBoolean(CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY, true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    cacheConfig = new CacheConfig(conf);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    assertTrue(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertTrue(cacheConfig.shouldCacheDataCompressed());<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assertTrue(cacheConfig.shouldCacheDataOnWrite());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, false);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>    cacheConfig = new CacheConfig(conf);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, true);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    HColumnDescriptor family = new HColumnDescriptor("testDisableCacheDataBlock");<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    family.setBlockCacheEnabled(false);<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    cacheConfig = new CacheConfig(conf, family);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<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>  @Test<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public void testCacheConfigDefaultLRUBlockCache() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    basicBlockCacheOps(cc, false, true);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<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>  /**<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @Test<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public void testOffHeapBucketCacheConfig() {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public void testOnHeapBucketCacheConfig() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "heap");<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public void testFileBucketCacheConfig() throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    HBaseTestingUtility htu = new HBaseTestingUtility(this.conf);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      Path p = new Path(htu.getDataTestDir(), "bc.txt");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      FileSystem fs = FileSystem.get(this.conf);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      fs.create(p).close();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "file:" + p);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      doBucketCacheConfigTest();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } finally {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      htu.cleanupTestDir();<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>  private void doBucketCacheConfigTest() {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    final int bcSize = 100;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    basicBlockCacheOps(cc, false, false);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    BlockCache [] bcs = cbc.getBlockCaches();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    assertTrue(bcs[0] instanceof LruBlockCache);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LruBlockCache lbc = (LruBlockCache)bcs[0];<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    assertEquals(MemorySizeUtil.getLruCacheSize(this.conf), lbc.getMaxSize());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    assertTrue(bcs[1] instanceof BucketCache);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    BucketCache bc = (BucketCache)bcs[1];<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    assertEquals(bcSize, bc.getMaxSize() / (1024 * 1024));<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * LruBlockCache as L1 with a BucketCache for L2.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  @Test (timeout=10000)<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public void testBucketCacheConfigL1L2Setup() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Make lru size is smaller than bcSize for sure.  Need this to be true so when eviction<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    // from L1 happens, it does not fail because L2 can't take the eviction because block too big.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    this.conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.001f);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    long lruExpectedSize = MemorySizeUtil.getLruCacheSize(this.conf);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    final int bcSize = 100;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    long bcExpectedSize = 100 * 1024 * 1024; // MB.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    assertTrue(lruExpectedSize &lt; bcExpectedSize);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    this.conf.setBoolean(CacheConfig.BUCKET_CACHE_COMBINED_KEY, false);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    basicBlockCacheOps(cc, false, false);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    LruBlockCache lbc = (LruBlockCache)cc.getBlockCache();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    assertEquals(lruExpectedSize, lbc.getMaxSize());<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    BlockCache bc = lbc.getVictimHandler();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    assertEquals(bcExpectedSize, ((BucketCache) bc).getMaxSize());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    // Test the L1+L2 deploy works as we'd expect with blocks evicted from L1 going to L2.<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    long initialL1BlockCount = lbc.getBlockCount();<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    long initialL2BlockCount = bc.getBlockCount();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    Cacheable c = new DataCacheEntry();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    BlockCacheKey bck = new BlockCacheKey("bck", 0);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    lbc.cacheBlock(bck, c, false, false);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    assertEquals(initialL1BlockCount + 1, lbc.getBlockCount());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertEquals(initialL2BlockCount, bc.getBlockCount());<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // Force evictions by putting in a block too big.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    final long justTooBigSize = lbc.acceptableSize() + 1;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    lbc.cacheBlock(new BlockCacheKey("bck2", 0), new DataCacheEntry() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      @Override<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      public long heapSize() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        return justTooBigSize;<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 int getSerializedLength() {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        return (int)heapSize();<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>    // The eviction thread in lrublockcache needs to run.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    while (initialL1BlockCount != lbc.getBlockCount()) Threads.sleep(10);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    assertEquals(initialL1BlockCount, lbc.getBlockCount());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    long count = bc.getBlockCount();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    assertTrue(initialL2BlockCount + 1 &lt;= count);<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * LruBlockCache when using CombinedBlockCcahe.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Test<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public void testCacheDataInL1() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, 100);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    // Add a data block.  Should go into L2, into the Bucket Cache, not the LruBlockCache.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    cacheDataBlock(cc, "1");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    LruBlockCache lrubc = (LruBlockCache)cbc.getBlockCaches()[0];<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    assertDataBlockCount(lrubc, 0);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // Enable our test flag.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    cc.setCacheDataInL1(true);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    cacheDataBlock(cc, "2");<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    assertDataBlockCount(lrubc, 1);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    cc.setCacheDataInL1(false);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    cacheDataBlock(cc, "3");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    assertDataBlockCount(lrubc, 1);<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>  @Test<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  public void testL2CacheWithInvalidBucketSize() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    Configuration c = new Configuration(this.conf);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    c.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    c.set(CacheConfig.BUCKET_CACHE_BUCKETS_KEY, "256,512,1024,2048,4000,4096");<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    c.setFloat(HConstants.BUCKET_CACHE_SIZE_KEY, 1024);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    try {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      CacheConfig.getL2(c);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      fail("Should throw IllegalArgumentException when passing illegal value for bucket size");<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    } catch (IllegalArgumentException e) {<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><a name="line.430"></a>
+<span class="sourceLineNo">431</span>  private void assertDataBlockCount(final LruBlockCache bc, final int expected) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Map&lt;BlockType, Integer&gt; blocks = bc.getBlockTypeCountsForTest();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    assertEquals(expected, blocks == null? 0:<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      blocks.get(BlockType.DATA) == null? 0:<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      blocks.get(BlockType.DATA).intValue());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>}<a name="line.437"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 5123827..6efd503 100644
--- a/book.html
+++ b/book.html
@@ -3585,7 +3585,7 @@ Some configurations would only appear in source code; the only way to identify t
 <dd>
 <div class="paragraph">
 <div class="title">Description</div>
-<p>A comma-separated list of sizes for buckets for the bucketcache. Can be multiple sizes. List block sizes in order from smallest to largest. The sizes you use will depend on your data access patterns. Must be a multiple of 1024 else you will run into 'java.io.IOException: Invalid HFile block magic' when you go to read from cache. If you specify no values here, then you pick up the default bucketsizes set in code (See BucketAllocator#DEFAULT_BUCKET_SIZES).</p>
+<p>A comma-separated list of sizes for buckets for the bucketcache. Can be multiple sizes. List block sizes in order from smallest to largest. The sizes you use will depend on your data access patterns. Must be a multiple of 256 else you will run into 'java.io.IOException: Invalid HFile block magic' when you go to read from cache. If you specify no values here, then you pick up the default bucketsizes set in code (See BucketAllocator#DEFAULT_BUCKET_SIZES).</p>
 </div>
 <div class="paragraph">
 <div class="title">Default</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index a7b731d..7ce8138 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="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -311,7 +311,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 50bd7e0..163159c 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="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <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" />
@@ -7381,12 +7381,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>797</td>
+<td>803</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>3259</td>
+<td>3253</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="b">
 <td>misc</td>
@@ -13242,7 +13242,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 43 has parse error. Missed HTML close tag 'TableName'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>181</td></tr>
 <tr class="b">
@@ -16926,7 +16926,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>2153</td></tr>
 <tr class="a">
@@ -22380,7 +22380,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 37 has parse error. Details: no viable alternative at input '&lt;ColumnFamily,' while parsing HTML_ELEMENT</td>
 <td>29</td></tr></table></div>
 <div class="section">
@@ -32291,31 +32291,31 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>632</td></tr>
+<td>631</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>680</td></tr>
+<td>689</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>681</td></tr>
+<td>690</td></tr>
 <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 103).</td>
-<td>683</td></tr>
+<td>692</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>684</td></tr></table></div>
+<td>693</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.io.hfile.CacheStats.java">org/apache/hadoop/hbase/io/hfile/CacheStats.java</h3>
 <table border="0" class="table table-striped">
@@ -48305,31 +48305,31 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>104</td></tr>
+<td>107</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>136</td></tr>
+<td>139</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>156</td></tr>
+<td>159</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>180</td></tr>
+<td>183</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>195</td></tr></table></div>
+<td>198</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.master.cleaner.TimeToLiveHFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.java</h3>
 <table border="0" class="table table-striped">
@@ -52842,7 +52842,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 60 has parse error. Missed HTML close tag 'Comparable'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>28</td></tr>
 <tr class="b">
@@ -55773,7 +55773,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 0 has parse error. Unrecognized error from ANTLR parser: null</td>
 <td>73</td></tr>
 <tr class="b">
@@ -69212,13 +69212,13 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 118).</td>
-<td>351</td></tr>
+<td>354</td></tr>
 <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 113).</td>
-<td>352</td></tr></table></div>
+<td>355</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint.java">org/apache/hadoop/hbase/replication/regionserver/HBaseInterClusterReplicationEndpoint.java</h3>
 <table border="0" class="table table-striped">
@@ -89502,7 +89502,7 @@
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 33 has parse error. It is forbidden to close singleton HTML tags. Tag: br.</td>
 <td>63</td></tr>
 <tr class="b">
@@ -99320,31 +99320,31 @@
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>68</td></tr>
+<td>69</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>251</td></tr>
+<td>258</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>270</td></tr>
+<td>277</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>271</td></tr>
+<td>278</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>299</td></tr></table></div>
+<td>306</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ByteBufferUtils.java">org/apache/hadoop/hbase/util/ByteBufferUtils.java</h3>
 <table border="0" class="table table-striped">
@@ -108861,7 +108861,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 9afc2e2..99aebfe 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="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -380,7 +380,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index de21f6e..e65e25b 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="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <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" />
@@ -679,7 +679,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 163eef0..d4c99b7 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="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <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" />
@@ -527,7 +527,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 7294e72..b085d25 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="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <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" />
@@ -703,7 +703,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index f2f904b..0fef98b 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="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <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" />
@@ -318,7 +318,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index fc48ae6..e21c9bd 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="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <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" />
@@ -900,7 +900,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index fe9c640..978281e 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3815,21 +3815,21 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Wed Jul 19 21:39:34 UTC 2017"</code></td>
+<td class="colLast"><code>"Thu Jul 20 21:39:28 UTC 2017"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"5f54e28510fdbdc1a08688168f8df19904bcd975"</code></td>
+<td class="colLast"><code>"bc93b6610b349d38502290af27da0ae0b5fd4936"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#srcChecksum">srcChecksum</a></code></td>
-<td class="colLast"><code>"b993c2bc29b4c3bdde7e9ae32a183a0d"</code></td>
+<td class="colLast"><code>"a6f3d1b71623ea149646177599217d87"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.url">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index fbffe57..412070e 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -49534,6 +49534,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HasThread.html#getThread--">getThread()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/HasThread.html" title="class in org.apache.hadoop.hbase.util">HasThread</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/ByteBufferArray.html#getThreadCount--">getThreadCount()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/monitoring/ThreadMonitoring.html#getThreadInfo-java.lang.Thread-">getThreadInfo(Thread)</a></span> - Static method in class org.apache.hadoop.hbase.monitoring.<a href="org/apache/hadoop/hbase/monitoring/ThreadMonitoring.html" title="class in org.apache.hadoop.hbase.monitoring">ThreadMonitoring</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ConnectionImplementation.html#getThreadPool-int-int-java.lang.String-java.util.concurrent.BlockingQueue-">getThreadPool(int, int, String, BlockingQueue&lt;Runnable&gt;)</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>

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheConfig.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
index 3523fd8..44cd9de 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
@@ -492,7 +492,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#getL1Internal-org.apache.hadoop.conf.Configuration-">getL1Internal</a></span>(org.apache.hadoop.conf.Configuration&nbsp;c)</code>&nbsp;</td>
 </tr>
 <tr id="i6" class="altColor">
-<td class="colFirst"><code>private static <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="colFirst"><code>(package private) static <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><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#getL2-org.apache.hadoop.conf.Configuration-">getL2</a></span>(org.apache.hadoop.conf.Configuration&nbsp;c)</code>&nbsp;</td>
 </tr>
 <tr id="i7" class="rowColor">
@@ -1600,7 +1600,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getL2</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.587">getL2</a>(org.apache.hadoop.conf.Configuration&nbsp;c)</pre>
+<pre>static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.588">getL2</a>(org.apache.hadoop.conf.Configuration&nbsp;c)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>c</code> - Configuration to use.</dd>
@@ -1616,7 +1616,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getExternalBlockcache</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.603">getExternalBlockcache</a>(org.apache.hadoop.conf.Configuration&nbsp;c)</pre>
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.602">getExternalBlockcache</a>(org.apache.hadoop.conf.Configuration&nbsp;c)</pre>
 </li>
 </ul>
 <a name="getBucketCache-org.apache.hadoop.conf.Configuration-">
@@ -1625,7 +1625,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getBucketCache</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.629">getBucketCache</a>(org.apache.hadoop.conf.Configuration&nbsp;c)</pre>
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.628">getBucketCache</a>(org.apache.hadoop.conf.Configuration&nbsp;c)</pre>
 </li>
 </ul>
 <a name="instantiateBlockCache-org.apache.hadoop.conf.Configuration-">
@@ -1634,7 +1634,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>instantiateBlockCache</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.679">instantiateBlockCache</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.688">instantiateBlockCache</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Returns the block cache or <code>null</code> in case none should be used.
  Sets GLOBAL_BLOCK_CACHE_INSTANCE</div>
 <dl>
@@ -1651,7 +1651,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>clearGlobalInstances</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.712">clearGlobalInstances</a>()</pre>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.721">clearGlobalInstances</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/BlockCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/BlockCache.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/BlockCache.html
index 5ca7856..9e37cf1 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/BlockCache.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/BlockCache.html
@@ -250,7 +250,7 @@
 <td class="colLast"><span class="typeNameLabel">CacheConfig.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#getExternalBlockcache-org.apache.hadoop.conf.Configuration-">getExternalBlockcache</a></span>(org.apache.hadoop.conf.Configuration&nbsp;c)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private static <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="colFirst"><code>(package private) static <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"><span class="typeNameLabel">CacheConfig.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#getL2-org.apache.hadoop.conf.Configuration-">getL2</a></span>(org.apache.hadoop.conf.Configuration&nbsp;c)</code>&nbsp;</td>
 </tr>
 <tr class="altColor">

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html
index d676e56..f40dbd8 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html#line.127">ReplicationZKNodeCleaner.ReplicationQueueDeletor</a>
+<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html#line.130">ReplicationZKNodeCleaner.ReplicationQueueDeletor</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationStateZKBase.html" title="class in org.apache.hadoop.hbase.replication">ReplicationStateZKBase</a></pre>
 </li>
 </ul>
@@ -220,7 +220,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationQueueDeletor</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html#line.129">ReplicationQueueDeletor</a>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZooKeeperWatcher</a>&nbsp;zk,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html#line.132">ReplicationQueueDeletor</a>(<a href="../../../../../../org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZooKeeperWatcher</a>&nbsp;zk,
                                org.apache.hadoop.conf.Configuration&nbsp;conf,
                                <a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a>&nbsp;abortable)</pre>
 </li>
@@ -239,7 +239,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>removeQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html#line.138">removeQueue</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;replicator,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html#line.141">removeQueue</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;replicator,
                         <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId)
                  throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -257,7 +257,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockList">
 <li class="blockList">
 <h4>removeHFileRefsQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html#line.158">removeHFileRefsQueue</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hfileRefsQueueId)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html#line.161">removeHFileRefsQueue</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hfileRefsQueueId)
                           throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -273,7 +273,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/replication/Replicati
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getHfileRefsZNode</h4>
-<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html#line.172">getHfileRefsZNode</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html#line.175">getHfileRefsZNode</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html b/devapidocs/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html
index ec929c2..18c6cdc 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html
@@ -345,7 +345,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getUnDeletedHFileRefsQueues</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html#line.106">getUnDeletedHFileRefsQueues</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html#line.109">getUnDeletedHFileRefsQueues</a>()
                                         throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -362,7 +362,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>removeQueues</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html#line.182">removeQueues</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;undeletedQueues)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html#line.185">removeQueues</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;undeletedQueues)
                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Remove the undeleted replication queue's zk node for removed peers.</div>
 <dl>
@@ -379,7 +379,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>removeHFileRefsQueues</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html#line.197">removeHFileRefsQueues</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;undeletedHFileRefsQueues)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html#line.200">removeHFileRefsQueues</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;undeletedHFileRefsQueues)
                            throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Remove the undeleted hfile-refs queue's zk node for removed peers.</div>
 <dl>

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

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

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

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

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

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


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html
index 9ec7269..8428049 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html
@@ -331,118 +331,121 @@
 <span class="sourceLineNo">323</span>    // Loops each peer on each RS and dumps the queues<a name="line.323"></a>
 <span class="sourceLineNo">324</span>    try {<a name="line.324"></a>
 <span class="sourceLineNo">325</span>      List&lt;String&gt; regionservers = queuesClient.getListOfReplicators();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      for (String regionserver : regionservers) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        List&lt;String&gt; queueIds = queuesClient.getAllQueues(regionserver);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        replicationQueues.init(regionserver);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        if (!liveRegionServers.contains(regionserver)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          deadRegionServers.add(regionserver);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        for (String queueId : queueIds) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          List&lt;String&gt; wals = queuesClient.getLogsInQueue(regionserver, queueId);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            deletedQueues.add(regionserver + "/" + queueId);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, true,<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              hdfs));<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          } else {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, false,<a name="line.340"></a>
+<span class="sourceLineNo">326</span>      if (regionservers == null || regionservers.isEmpty()) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        return sb.toString();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      for (String regionserver : regionservers) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        List&lt;String&gt; queueIds = queuesClient.getAllQueues(regionserver);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        replicationQueues.init(regionserver);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        if (!liveRegionServers.contains(regionserver)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          deadRegionServers.add(regionserver);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        for (String queueId : queueIds) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          List&lt;String&gt; wals = queuesClient.getLogsInQueue(regionserver, queueId);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>            deletedQueues.add(regionserver + "/" + queueId);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, true,<a name="line.340"></a>
 <span class="sourceLineNo">341</span>              hdfs));<a name="line.341"></a>
-<span class="sourceLineNo">342</span>          }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    } catch (KeeperException ke) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throw new IOException(ke);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return sb.toString();<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>  private String formatQueue(String regionserver, ReplicationQueues replicationQueues, ReplicationQueueInfo queueInfo,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>                           String queueId, List&lt;String&gt; wals, boolean isDeleted, boolean hdfs) throws Exception {<a name="line.352"></a>
+<span class="sourceLineNo">342</span>          } else {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, false,<a name="line.343"></a>
+<span class="sourceLineNo">344</span>              hdfs));<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>    } catch (KeeperException ke) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw new IOException(ke);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return sb.toString();<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>    StringBuilder sb = new StringBuilder();<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    List&lt;String&gt; deadServers ;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    sb.append("Dumping replication queue info for RegionServer: [" + regionserver + "]" + "\n");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    sb.append("    Queue znode: " + queueId + "\n");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    sb.append("    PeerID: " + queueInfo.getPeerId() + "\n");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    sb.append("    Recovered: " + queueInfo.isQueueRecovered() + "\n");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    deadServers = queueInfo.getDeadRegionServers();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (deadServers.isEmpty()) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      sb.append("    No dead RegionServers found in this queue." + "\n");<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      sb.append("    Dead RegionServers: " + deadServers + "\n");<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    sb.append("    Was deleted: " + isDeleted + "\n");<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    sb.append("    Number of WALs in replication queue: " + wals.size() + "\n");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    peersQueueSize.addAndGet(queueInfo.getPeerId(), wals.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>    for (String wal : wals) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      long position = replicationQueues.getLogPosition(queueInfo.getPeerId(), wal);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      sb.append("    Replication position for " + wal + ": " + (position &gt; 0 ? position : "0"<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          + " (not started or nothing to replicate)") + "\n");<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    if (hdfs) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      FileSystem fs = FileSystem.get(getConf());<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      sb.append("    Total size of WALs on HDFS for this queue: "<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          + StringUtils.humanSize(getTotalWALSize(fs, wals, regionserver)) + "\n");<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    return sb.toString();<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>   *  return total size in bytes from a list of WALs<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private long getTotalWALSize(FileSystem fs, List&lt;String&gt; wals, String server) throws IOException {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    int size = 0;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    FileStatus fileStatus;<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>    for (String wal : wals) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      try {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        fileStatus = (new WALLink(getConf(), server, wal)).getFileStatus(fs);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } catch (IOException e) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (e instanceof FileNotFoundException) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          numWalsNotFound++;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          LOG.warn("WAL " + wal + " couldn't be found, skipping", e);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        } else {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          LOG.warn("Can't get file status of WAL " + wal + ", skipping", e);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        continue;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      size += fileStatus.getLen();<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>    totalSizeOfWALs += size;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    return size;<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 class WarnOnlyAbortable implements Abortable {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public void abort(String why, Throwable e) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      LOG.warn("DumpReplicationQueue received abort, ignoring.  Reason: " + why);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      if (LOG.isDebugEnabled()) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        LOG.debug(e);<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>    @Override<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    public boolean isAborted() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      return false;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<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>  private static class WarnOnlyStoppable implements Stoppable {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    public void stop(String why) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      LOG.warn("DumpReplicationQueue received stop, ignoring.  Reason: " + why);<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>    @Override<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public boolean isStopped() {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      return false;<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>}<a name="line.437"></a>
+<span class="sourceLineNo">354</span>  private String formatQueue(String regionserver, ReplicationQueues replicationQueues, ReplicationQueueInfo queueInfo,<a name="line.354"></a>
+<span class="sourceLineNo">355</span>                           String queueId, List&lt;String&gt; wals, boolean isDeleted, boolean hdfs) throws Exception {<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    StringBuilder sb = new StringBuilder();<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    List&lt;String&gt; deadServers ;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    sb.append("Dumping replication queue info for RegionServer: [" + regionserver + "]" + "\n");<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    sb.append("    Queue znode: " + queueId + "\n");<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    sb.append("    PeerID: " + queueInfo.getPeerId() + "\n");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    sb.append("    Recovered: " + queueInfo.isQueueRecovered() + "\n");<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    deadServers = queueInfo.getDeadRegionServers();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    if (deadServers.isEmpty()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      sb.append("    No dead RegionServers found in this queue." + "\n");<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      sb.append("    Dead RegionServers: " + deadServers + "\n");<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    sb.append("    Was deleted: " + isDeleted + "\n");<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    sb.append("    Number of WALs in replication queue: " + wals.size() + "\n");<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    peersQueueSize.addAndGet(queueInfo.getPeerId(), wals.size());<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>    for (String wal : wals) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      long position = replicationQueues.getLogPosition(queueInfo.getPeerId(), wal);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      sb.append("    Replication position for " + wal + ": " + (position &gt; 0 ? position : "0"<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          + " (not started or nothing to replicate)") + "\n");<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>    if (hdfs) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      FileSystem fs = FileSystem.get(getConf());<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      sb.append("    Total size of WALs on HDFS for this queue: "<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          + StringUtils.humanSize(getTotalWALSize(fs, wals, regionserver)) + "\n");<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    return sb.toString();<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>   *  return total size in bytes from a list of WALs<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  private long getTotalWALSize(FileSystem fs, List&lt;String&gt; wals, String server) throws IOException {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    int size = 0;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    FileStatus fileStatus;<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    for (String wal : wals) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      try {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        fileStatus = (new WALLink(getConf(), server, wal)).getFileStatus(fs);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      } catch (IOException e) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        if (e instanceof FileNotFoundException) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          numWalsNotFound++;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          LOG.warn("WAL " + wal + " couldn't be found, skipping", e);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        } else {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          LOG.warn("Can't get file status of WAL " + wal + ", skipping", e);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        continue;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      size += fileStatus.getLen();<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>    totalSizeOfWALs += size;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    return size;<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>  private static class WarnOnlyAbortable implements Abortable {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    public void abort(String why, Throwable e) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      LOG.warn("DumpReplicationQueue received abort, ignoring.  Reason: " + why);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      if (LOG.isDebugEnabled()) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        LOG.debug(e);<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>    @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    public boolean isAborted() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      return false;<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><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  private static class WarnOnlyStoppable implements Stoppable {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    public void stop(String why) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      LOG.warn("DumpReplicationQueue received stop, ignoring.  Reason: " + why);<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 boolean isStopped() {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return false;<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>}<a name="line.440"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html
index 7a442f0..103cd9e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html
@@ -52,278 +52,285 @@
 <span class="sourceLineNo">044</span> * reading/writing data from this large buffer with a position and offset<a name="line.44"></a>
 <span class="sourceLineNo">045</span> */<a name="line.45"></a>
 <span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public final class ByteBufferArray {<a name="line.47"></a>
+<span class="sourceLineNo">047</span>public class ByteBufferArray {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>  private static final Log LOG = LogFactory.getLog(ByteBufferArray.class);<a name="line.48"></a>
 <span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span>  public static final int DEFAULT_BUFFER_SIZE = 4 * 1024 * 1024;<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  @VisibleForTesting<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  ByteBuffer buffers[];<a name="line.52"></a>
 <span class="sourceLineNo">053</span>  private int bufferSize;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private int bufferCount;<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>   * We allocate a number of byte buffers as the capacity. In order not to out<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   * of the array bounds for the last byte(see {@link ByteBufferArray#multiple}),<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * we will allocate one additional buffer with capacity 0;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * @param capacity total size of the byte buffer array<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * @param directByteBuffer true if we allocate direct buffer<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   * @param allocator the ByteBufferAllocator that will create the buffers<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * @throws IOException throws IOException if there is an exception thrown by the allocator<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  public ByteBufferArray(long capacity, boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      throws IOException {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    this.bufferSize = DEFAULT_BUFFER_SIZE;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    if (this.bufferSize &gt; (capacity / 16))<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      this.bufferSize = (int) roundUp(capacity / 16, 32768);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    this.bufferCount = (int) (roundUp(capacity, bufferSize) / bufferSize);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    LOG.info("Allocating buffers total=" + StringUtils.byteDesc(capacity)<a name="line.71"></a>
-<span class="sourceLineNo">072</span>        + ", sizePerBuffer=" + StringUtils.byteDesc(bufferSize) + ", count="<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        + bufferCount + ", direct=" + directByteBuffer);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    buffers = new ByteBuffer[bufferCount + 1];<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    createBuffers(directByteBuffer, allocator);<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>  private void createBuffers(boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      throws IOException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    int threadCount = Runtime.getRuntime().availableProcessors();<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    ExecutorService service = new ThreadPoolExecutor(threadCount, threadCount, 0L,<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        TimeUnit.MILLISECONDS, new LinkedBlockingQueue&lt;Runnable&gt;());<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    int perThreadCount = Math.round((float) (bufferCount) / threadCount);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    int lastThreadCount = bufferCount - (perThreadCount * (threadCount - 1));<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    Future&lt;ByteBuffer[]&gt;[] futures = new Future[threadCount];<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    try {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      for (int i = 0; i &lt; threadCount; i++) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        // Last thread will have to deal with a different number of buffers<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        int buffersToCreate = (i == threadCount - 1) ? lastThreadCount : perThreadCount;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        futures[i] = service.submit(<a name="line.90"></a>
-<span class="sourceLineNo">091</span>          new BufferCreatorCallable(bufferSize, directByteBuffer, buffersToCreate, allocator));<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      int bufferIndex = 0;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      for (Future&lt;ByteBuffer[]&gt; future : futures) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        try {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>          ByteBuffer[] buffers = future.get();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>          for (ByteBuffer buffer : buffers) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>            this.buffers[bufferIndex++] = buffer;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>          }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        } catch (InterruptedException | ExecutionException e) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>          LOG.error("Buffer creation interrupted", e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>          throw new IOException(e);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    } finally {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      service.shutdownNow();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    // always create on heap empty dummy buffer at last<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    this.buffers[bufferCount] = ByteBuffer.allocate(0);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * A callable that creates buffers of the specified length either onheap/offheap using the<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * {@link ByteBufferAllocator}<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static class BufferCreatorCallable implements Callable&lt;ByteBuffer[]&gt; {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private final int bufferCapacity;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    private final boolean directByteBuffer;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    private final int bufferCount;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    private final ByteBufferAllocator allocator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>    BufferCreatorCallable(int bufferCapacity, boolean directByteBuffer, int bufferCount,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>        ByteBufferAllocator allocator) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      this.bufferCapacity = bufferCapacity;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      this.directByteBuffer = directByteBuffer;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      this.bufferCount = bufferCount;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      this.allocator = allocator;<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 ByteBuffer[] call() throws Exception {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      ByteBuffer[] buffers = new ByteBuffer[this.bufferCount];<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      for (int i = 0; i &lt; this.bufferCount; i++) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        buffers[i] = allocator.allocate(this.bufferCapacity, this.directByteBuffer);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      return buffers;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private long roundUp(long n, long to) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return ((n + to - 1) / to) * to;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param start start position in the ByteBufferArray<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param dstArray The array into which bytes are to be written<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @return number of bytes read<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public int getMultiple(long start, int len, byte[] dstArray) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return getMultiple(start, len, dstArray, 0);<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>   * Transfers bytes from this buffer array into the given destination array<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param start start offset of this buffer array<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @param dstArray The array into which bytes are to be written<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @param dstOffset The offset within the given array of the first byte to be<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   *          written<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @return number of bytes read<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public int getMultiple(long start, int len, byte[] dstArray, int dstOffset) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    multiple(start, len, dstArray, dstOffset, GET_MULTIPLE_VISTOR);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return len;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  private final static Visitor GET_MULTIPLE_VISTOR = new Visitor() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    @Override<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      ByteBufferUtils.copyFromBufferToArray(array, bb, pos, arrayIdx, len);<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">054</span>  @VisibleForTesting<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  int bufferCount;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  /**<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * We allocate a number of byte buffers as the capacity. In order not to out<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * of the array bounds for the last byte(see {@link ByteBufferArray#multiple}),<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * we will allocate one additional buffer with capacity 0;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * @param capacity total size of the byte buffer array<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * @param directByteBuffer true if we allocate direct buffer<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * @param allocator the ByteBufferAllocator that will create the buffers<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   * @throws IOException throws IOException if there is an exception thrown by the allocator<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  public ByteBufferArray(long capacity, boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      throws IOException {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    this.bufferSize = DEFAULT_BUFFER_SIZE;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    if (this.bufferSize &gt; (capacity / 16))<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      this.bufferSize = (int) roundUp(capacity / 16, 32768);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.bufferCount = (int) (roundUp(capacity, bufferSize) / bufferSize);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    LOG.info("Allocating buffers total=" + StringUtils.byteDesc(capacity)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>        + ", sizePerBuffer=" + StringUtils.byteDesc(bufferSize) + ", count="<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        + bufferCount + ", direct=" + directByteBuffer);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    buffers = new ByteBuffer[bufferCount + 1];<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    createBuffers(directByteBuffer, allocator);<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>  @VisibleForTesting<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  void createBuffers(boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      throws IOException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    int threadCount = getThreadCount();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    ExecutorService service = new ThreadPoolExecutor(threadCount, threadCount, 0L,<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        TimeUnit.MILLISECONDS, new LinkedBlockingQueue&lt;Runnable&gt;());<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    int perThreadCount = (int)Math.floor((double) (bufferCount) / threadCount);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    int lastThreadCount = bufferCount - (perThreadCount * (threadCount - 1));<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    Future&lt;ByteBuffer[]&gt;[] futures = new Future[threadCount];<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    try {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      for (int i = 0; i &lt; threadCount; i++) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        // Last thread will have to deal with a different number of buffers<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        int buffersToCreate = (i == threadCount - 1) ? lastThreadCount : perThreadCount;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        futures[i] = service.submit(<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          new BufferCreatorCallable(bufferSize, directByteBuffer, buffersToCreate, allocator));<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      int bufferIndex = 0;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      for (Future&lt;ByteBuffer[]&gt; future : futures) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        try {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>          ByteBuffer[] buffers = future.get();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          for (ByteBuffer buffer : buffers) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            this.buffers[bufferIndex++] = buffer;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>          }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        } catch (InterruptedException | ExecutionException e) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>          LOG.error("Buffer creation interrupted", e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>          throw new IOException(e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    } finally {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      service.shutdownNow();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    // always create on heap empty dummy buffer at last<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    this.buffers[bufferCount] = ByteBuffer.allocate(0);<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>  @VisibleForTesting<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  int getThreadCount() {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    return Runtime.getRuntime().availableProcessors();<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>  /**<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * A callable that creates buffers of the specified length either onheap/offheap using the<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * {@link ByteBufferAllocator}<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static class BufferCreatorCallable implements Callable&lt;ByteBuffer[]&gt; {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    private final int bufferCapacity;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    private final boolean directByteBuffer;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    private final int bufferCount;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    private final ByteBufferAllocator allocator;<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>    BufferCreatorCallable(int bufferCapacity, boolean directByteBuffer, int bufferCount,<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        ByteBufferAllocator allocator) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      this.bufferCapacity = bufferCapacity;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      this.directByteBuffer = directByteBuffer;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      this.bufferCount = bufferCount;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      this.allocator = allocator;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>    @Override<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    public ByteBuffer[] call() throws Exception {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      ByteBuffer[] buffers = new ByteBuffer[this.bufferCount];<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      for (int i = 0; i &lt; this.bufferCount; i++) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        buffers[i] = allocator.allocate(this.bufferCapacity, this.directByteBuffer);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      return buffers;<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>  private long roundUp(long n, long to) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    return ((n + to - 1) / to) * to;<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>  /**<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param start start position in the ByteBufferArray<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param dstArray The array into which bytes are to be written<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return number of bytes read<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  public int getMultiple(long start, int len, byte[] dstArray) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return getMultiple(start, len, dstArray, 0);<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>   * Transfers bytes from this buffer array into the given destination array<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param start start offset of this buffer array<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param dstArray The array into which bytes are to be written<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * @param dstOffset The offset within the given array of the first byte to be<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   *          written<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @return number of bytes read<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public int getMultiple(long start, int len, byte[] dstArray, int dstOffset) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    multiple(start, len, dstArray, dstOffset, GET_MULTIPLE_VISTOR);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    return len;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  /**<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * Transfers bytes from the given source array into this buffer array<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @param start start offset of this buffer array<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @param srcArray The array from which bytes are to be read<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public void putMultiple(long start, int len, byte[] srcArray) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    putMultiple(start, len, srcArray, 0);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  /**<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * Transfers bytes from the given source array into this buffer array<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @param start start offset of this buffer array<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param srcArray The array from which bytes are to be read<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param srcOffset The offset within the given array of the first byte to be<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   *          read<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public void putMultiple(long start, int len, byte[] srcArray, int srcOffset) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    multiple(start, len, srcArray, srcOffset, PUT_MULTIPLE_VISITOR);<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>  private final static Visitor PUT_MULTIPLE_VISITOR = new Visitor() {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      ByteBufferUtils.copyFromArrayToBuffer(bb, pos, array, arrayIdx, len);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  };<a name="line.203"></a>
+<span class="sourceLineNo">176</span>  private final static Visitor GET_MULTIPLE_VISTOR = new Visitor() {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    @Override<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ByteBufferUtils.copyFromBufferToArray(array, bb, pos, arrayIdx, len);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  };<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>  /**<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * Transfers bytes from the given source array into this buffer array<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * @param start start offset of this buffer array<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * @param srcArray The array from which bytes are to be read<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public void putMultiple(long start, int len, byte[] srcArray) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    putMultiple(start, len, srcArray, 0);<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>  /**<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   * Transfers bytes from the given source array into this buffer array<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * @param start start offset of this buffer array<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * @param srcArray The array from which bytes are to be read<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * @param srcOffset The offset within the given array of the first byte to be<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   *          read<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void putMultiple(long start, int len, byte[] srcArray, int srcOffset) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    multiple(start, len, srcArray, srcOffset, PUT_MULTIPLE_VISITOR);<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>  private interface Visitor {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    /**<a name="line.206"></a>
-<span class="sourceLineNo">207</span>     * Visit the given byte buffer, if it is a read action, we will transfer the<a name="line.207"></a>
-<span class="sourceLineNo">208</span>     * bytes from the buffer to the destination array, else if it is a write<a name="line.208"></a>
-<span class="sourceLineNo">209</span>     * action, we will transfer the bytes from the source array to the buffer<a name="line.209"></a>
-<span class="sourceLineNo">210</span>     * @param bb byte buffer<a name="line.210"></a>
-<span class="sourceLineNo">211</span>     * @param pos Start position in ByteBuffer<a name="line.211"></a>
-<span class="sourceLineNo">212</span>     * @param array a source or destination byte array<a name="line.212"></a>
-<span class="sourceLineNo">213</span>     * @param arrayOffset offset of the byte array<a name="line.213"></a>
-<span class="sourceLineNo">214</span>     * @param len read/write length<a name="line.214"></a>
-<span class="sourceLineNo">215</span>     */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    void visit(ByteBuffer bb, int pos, byte[] array, int arrayOffset, int len);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * Access(read or write) this buffer array with a position and length as the<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * given array. Here we will only lock one buffer even if it may be need visit<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * several buffers. The consistency is guaranteed by the caller.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param start start offset of this buffer array<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param len The maximum number of bytes to be accessed<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param array The array from/to which bytes are to be read/written<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param arrayOffset The offset within the given array of the first byte to<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   *          be read or written<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @param visitor implement of how to visit the byte buffer<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  void multiple(long start, int len, byte[] array, int arrayOffset, Visitor visitor) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    assert len &gt;= 0;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    long end = start + len;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    int startBuffer = (int) (start / bufferSize), startOffset = (int) (start % bufferSize);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    int endBuffer = (int) (end / bufferSize), endOffset = (int) (end % bufferSize);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    assert array.length &gt;= len + arrayOffset;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        || (endBuffer == bufferCount &amp;&amp; endOffset == 0);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      String msg = "Failed multiple, start=" + start + ",startBuffer="<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          + startBuffer + ",bufferSize=" + bufferSize;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      LOG.error(msg);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      throw new RuntimeException(msg);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    int srcIndex = 0, cnt = -1;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    for (int i = startBuffer; i &lt;= endBuffer; ++i) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      int pos = 0;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (i == startBuffer) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        cnt = bufferSize - startOffset;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        if (cnt &gt; len) cnt = len;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        pos = startOffset;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      } else if (i == endBuffer) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        cnt = endOffset;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      } else {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        cnt = bufferSize;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      visitor.visit(bb, pos, array, srcIndex + arrayOffset, cnt);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      srcIndex += cnt;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    assert srcIndex == len;<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>  /**<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * Creates a ByteBuff from a given array of ByteBuffers from the given offset to the<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * length specified. For eg, if there are 4 buffers forming an array each with length 10 and<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * if we call asSubBuffer(5, 10) then we will create an MBB consisting of two BBs<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * and the first one be a BB from 'position' 5 to a 'length' 5 and the 2nd BB will be from<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * 'position' 0 to 'length' 5.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * @param offset<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * @param len<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * @return a ByteBuff formed from the underlying ByteBuffers<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public ByteBuff asSubByteBuff(long offset, int len) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assert len &gt;= 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    long end = offset + len;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int startBuffer = (int) (offset / bufferSize), startBufferOffset = (int) (offset % bufferSize);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    int endBuffer = (int) (end / bufferSize), endBufferOffset = (int) (end % bufferSize);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // Last buffer in the array is a dummy one with 0 capacity. Avoid sending back that<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    if (endBuffer == this.bufferCount) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      endBuffer--;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      endBufferOffset = bufferSize;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        || (endBuffer == bufferCount &amp;&amp; endBufferOffset == 0);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      String msg = "Failed subArray, start=" + offset + ",startBuffer=" + startBuffer<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          + ",bufferSize=" + bufferSize;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.error(msg);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      throw new RuntimeException(msg);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    int srcIndex = 0, cnt = -1;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    ByteBuffer[] mbb = new ByteBuffer[endBuffer - startBuffer + 1];<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    for (int i = startBuffer, j = 0; i &lt;= endBuffer; ++i, j++) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      if (i == startBuffer) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        cnt = bufferSize - startBufferOffset;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        if (cnt &gt; len) cnt = len;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        bb.limit(startBufferOffset + cnt).position(startBufferOffset);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      } else if (i == endBuffer) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        cnt = endBufferOffset;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        bb.position(0).limit(cnt);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      } else {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        cnt = bufferSize;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        bb.position(0).limit(cnt);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      mbb[j] = bb.slice();<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      srcIndex += cnt;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    assert srcIndex == len;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    if (mbb.length &gt; 1) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      return new MultiByteBuff(mbb);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    } else {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      return new SingleByteBuff(mbb[0]);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>}<a name="line.318"></a>
+<span class="sourceLineNo">205</span>  private final static Visitor PUT_MULTIPLE_VISITOR = new Visitor() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    @Override<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      ByteBufferUtils.copyFromArrayToBuffer(bb, pos, array, arrayIdx, len);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  };<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private interface Visitor {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>     * Visit the given byte buffer, if it is a read action, we will transfer the<a name="line.214"></a>
+<span class="sourceLineNo">215</span>     * bytes from the buffer to the destination array, else if it is a write<a name="line.215"></a>
+<span class="sourceLineNo">216</span>     * action, we will transfer the bytes from the source array to the buffer<a name="line.216"></a>
+<span class="sourceLineNo">217</span>     * @param bb byte buffer<a name="line.217"></a>
+<span class="sourceLineNo">218</span>     * @param pos Start position in ByteBuffer<a name="line.218"></a>
+<span class="sourceLineNo">219</span>     * @param array a source or destination byte array<a name="line.219"></a>
+<span class="sourceLineNo">220</span>     * @param arrayOffset offset of the byte array<a name="line.220"></a>
+<span class="sourceLineNo">221</span>     * @param len read/write length<a name="line.221"></a>
+<span class="sourceLineNo">222</span>     */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    void visit(ByteBuffer bb, int pos, byte[] array, int arrayOffset, int len);<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>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * Access(read or write) this buffer array with a position and length as the<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * given array. Here we will only lock one buffer even if it may be need visit<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * several buffers. The consistency is guaranteed by the caller.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param start start offset of this buffer array<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param len The maximum number of bytes to be accessed<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param array The array from/to which bytes are to be read/written<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @param arrayOffset The offset within the given array of the first byte to<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   *          be read or written<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param visitor implement of how to visit the byte buffer<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  void multiple(long start, int len, byte[] array, int arrayOffset, Visitor visitor) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    assert len &gt;= 0;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    long end = start + len;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    int startBuffer = (int) (start / bufferSize), startOffset = (int) (start % bufferSize);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    int endBuffer = (int) (end / bufferSize), endOffset = (int) (end % bufferSize);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assert array.length &gt;= len + arrayOffset;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        || (endBuffer == bufferCount &amp;&amp; endOffset == 0);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      String msg = "Failed multiple, start=" + start + ",startBuffer="<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          + startBuffer + ",bufferSize=" + bufferSize;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      LOG.error(msg);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      throw new RuntimeException(msg);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    int srcIndex = 0, cnt = -1;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    for (int i = startBuffer; i &lt;= endBuffer; ++i) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      int pos = 0;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      if (i == startBuffer) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        cnt = bufferSize - startOffset;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (cnt &gt; len) cnt = len;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        pos = startOffset;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      } else if (i == endBuffer) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        cnt = endOffset;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      } else {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        cnt = bufferSize;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      visitor.visit(bb, pos, array, srcIndex + arrayOffset, cnt);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      srcIndex += cnt;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    assert srcIndex == len;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  /**<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * Creates a ByteBuff from a given array of ByteBuffers from the given offset to the<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * length specified. For eg, if there are 4 buffers forming an array each with length 10 and<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * if we call asSubBuffer(5, 10) then we will create an MBB consisting of two BBs<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * and the first one be a BB from 'position' 5 to a 'length' 5 and the 2nd BB will be from<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * 'position' 0 to 'length' 5.<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @param offset<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @param len<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @return a ByteBuff formed from the underlying ByteBuffers<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   */<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public ByteBuff asSubByteBuff(long offset, int len) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    assert len &gt;= 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    long end = offset + len;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    int startBuffer = (int) (offset / bufferSize), startBufferOffset = (int) (offset % bufferSize);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    int endBuffer = (int) (end / bufferSize), endBufferOffset = (int) (end % bufferSize);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    // Last buffer in the array is a dummy one with 0 capacity. Avoid sending back that<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (endBuffer == this.bufferCount) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      endBuffer--;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      endBufferOffset = bufferSize;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        || (endBuffer == bufferCount &amp;&amp; endBufferOffset == 0);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      String msg = "Failed subArray, start=" + offset + ",startBuffer=" + startBuffer<a name="line.295"></a>
+<span class="sourceLineNo">296</span>          + ",bufferSize=" + bufferSize;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.error(msg);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      throw new RuntimeException(msg);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    int srcIndex = 0, cnt = -1;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    ByteBuffer[] mbb = new ByteBuffer[endBuffer - startBuffer + 1];<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    for (int i = startBuffer, j = 0; i &lt;= endBuffer; ++i, j++) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      if (i == startBuffer) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        cnt = bufferSize - startBufferOffset;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        if (cnt &gt; len) cnt = len;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        bb.limit(startBufferOffset + cnt).position(startBufferOffset);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      } else if (i == endBuffer) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        cnt = endBufferOffset;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        bb.position(0).limit(cnt);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      } else {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        cnt = bufferSize;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        bb.position(0).limit(cnt);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      mbb[j] = bb.slice();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      srcIndex += cnt;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    assert srcIndex == len;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    if (mbb.length &gt; 1) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return new MultiByteBuff(mbb);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    } else {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new SingleByteBuff(mbb[0]);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>}<a name="line.325"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/source-repository.html b/hbase-archetypes/hbase-shaded-client-project/source-repository.html
index fba74ab..617f060 100644
--- a/hbase-archetypes/hbase-shaded-client-project/source-repository.html
+++ b/hbase-archetypes/hbase-shaded-client-project/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/team-list.html b/hbase-archetypes/hbase-shaded-client-project/team-list.html
index 80687d6..111afc5 100644
--- a/hbase-archetypes/hbase-shaded-client-project/team-list.html
+++ b/hbase-archetypes/hbase-shaded-client-project/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

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

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

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

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

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

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

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-spark/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependencies.html b/hbase-spark/dependencies.html
index 7f30eb9..add9f74 100644
--- a/hbase-spark/dependencies.html
+++ b/hbase-spark/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>
@@ -4643,9 +4643,9 @@ The following provides more details on the included cryptographic software:
 <td>No</td></tr>
 <tr class="a">
 <td>hbase-common-3.0.0-SNAPSHOT-tests.jar</td>
-<td>273.7 kB</td>
-<td>173</td>
-<td>148</td>
+<td>275.3 kB</td>
+<td>175</td>
+<td>150</td>
 <td>11</td>
 <td>1.8</td>
 <td>Yes</td>
@@ -4679,7 +4679,7 @@ The following provides more details on the included cryptographic software:
 <td>No</td></tr>
 <tr class="a">
 <td>hbase-hadoop2-compat-3.0.0-SNAPSHOT-tests.jar</td>
-<td>34.8 kB</td>
+<td>34.7 kB</td>
 <td>-</td>
 <td>-</td>
 <td>-</td>
@@ -5615,9 +5615,9 @@ The following provides more details on the included cryptographic software:
 <th>Sealed</th></tr>
 <tr class="a">
 <td>210</td>
-<td>141.8 MB</td>
-<td>78954</td>
-<td>72948</td>
+<td>141.9 MB</td>
+<td>78956</td>
+<td>72950</td>
 <td>2276</td>
 <td>1.8</td>
 <td>182</td>
@@ -5634,8 +5634,8 @@ The following provides more details on the included cryptographic software:
 <tr class="a">
 <td>test: 17</td>
 <td>test: 27.4 MB</td>
-<td>test: 6307</td>
-<td>test: 5668</td>
+<td>test: 6309</td>
+<td>test: 5670</td>
 <td>test: 154</td>
 <td>-</td>
 <td>test: 9</td>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index 0d02e91..ee90e82 100644
--- a/index.html
+++ b/index.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="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBaseâ„¢ Home</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -438,7 +438,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index d3d988e..6ab9b18 100644
--- a/integration.html
+++ b/integration.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; CI Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -296,7 +296,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 57416bd..93c93c5 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -293,7 +293,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index 8496423..1aeaf71 100644
--- a/license.html
+++ b/license.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Licenses</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -496,7 +496,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index c35112b..53b041e 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Mailing Lists</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -346,7 +346,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index c6e0252..2fce8cd 100644
--- a/metrics.html
+++ b/metrics.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -464,7 +464,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 8c48411..a215f34 100644
--- a/old_news.html
+++ b/old_news.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -419,7 +419,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index bb3622d..d18a05c 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugin Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -441,7 +441,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 8bd3fb1..fd51247 100644
--- a/plugins.html
+++ b/plugins.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -380,7 +380,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index d3d131e..548fe58 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Powered By Apache HBase™</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -774,7 +774,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index 23a9325..b712b03 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Summary</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -336,7 +336,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 23c5ca5..5d2df10 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -313,7 +313,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index 8efdbb3..695e019 100644
--- a/replication.html
+++ b/replication.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -308,7 +308,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 4ed206e..c7562f5 100644
--- a/resources.html
+++ b/resources.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Other Apache HBase (TM) Resources</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -336,7 +336,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 221558e..558971b 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Code Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -304,7 +304,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index e89759b..8bde9b0 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Apache HBase™ Sponsors</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -338,7 +338,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 58d7d2f..3dbe7c4 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Supporting Projects</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -525,7 +525,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index 812436c..7a2a397 100644
--- a/team-list.html
+++ b/team-list.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Team</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -675,7 +675,7 @@
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index 7c0f58d..c4bc498 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -670,6 +670,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/TestBulkLoad.WalMatcher.html" title="class in org.apache.hadoop.hbase.regionserver" target="classFrame">TestBulkLoad.WalMatcher</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/policies/TestBulkLoadCheckingViolationPolicyEnforcement.html" title="class in org.apache.hadoop.hbase.quotas.policies" target="classFrame">TestBulkLoadCheckingViolationPolicyEnforcement</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestByteBufferArray</a></li>
+<li><a href="org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestByteBufferArray.DummyByteBufferArray</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestByteBufferIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">TestByteBufferIOEngine</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestByteBufferIOEngine.BufferGrabbingDeserializer.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">TestByteBufferIOEngine.BufferGrabbingDeserializer</a></li>
 <li><a href="org/apache/hadoop/hbase/TestByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase" target="classFrame">TestByteBufferKeyValue</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 9814dde..d5a82ea 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -670,6 +670,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/TestBulkLoad.WalMatcher.html" title="class in org.apache.hadoop.hbase.regionserver">TestBulkLoad.WalMatcher</a></li>
 <li><a href="org/apache/hadoop/hbase/quotas/policies/TestBulkLoadCheckingViolationPolicyEnforcement.html" title="class in org.apache.hadoop.hbase.quotas.policies">TestBulkLoadCheckingViolationPolicyEnforcement</a></li>
 <li><a href="org/apache/hadoop/hbase/util/TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferArray</a></li>
+<li><a href="org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferArray.DummyByteBufferArray</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestByteBufferIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestByteBufferIOEngine</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestByteBufferIOEngine.BufferGrabbingDeserializer.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestByteBufferIOEngine.BufferGrabbingDeserializer</a></li>
 <li><a href="org/apache/hadoop/hbase/TestByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">TestByteBufferKeyValue</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index ba6e725..5396c82 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -9365,6 +9365,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/TestAssignmentListener.DummyAssignmentListener.html#DummyAssignmentListener--">DummyAssignmentListener()</a></span> - Constructor for class org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/TestAssignmentListener.DummyAssignmentListener.html" title="class in org.apache.hadoop.hbase.master">TestAssignmentListener.DummyAssignmentListener</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html#DummyByteBufferArray-long-boolean-org.apache.hadoop.hbase.util.ByteBufferAllocator-">DummyByteBufferArray(long, boolean, ByteBufferAllocator)</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferArray.DummyByteBufferArray</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestAsyncCoprocessorEndpoint.DummyRegionServerEndpoint.html#dummyCall-com.google.protobuf.RpcController-org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyRequest-com.google.protobuf.RpcCallback-">dummyCall(RpcController, DummyRegionServerEndpointProtos.DummyRequest, RpcCallback&lt;DummyRegionServerEndpointProtos.DummyResponse&gt;)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestAsyncCoprocessorEndpoint.DummyRegionServerEndpoint.html" title="class in org.apache.hadoop.hbase.coprocessor">TestAsyncCoprocessorEndpoint.DummyRegionServerEndpoint</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorEndpoint.DummyRegionServerEndpoint.html#dummyCall-com.google.protobuf.RpcController-org.apache.hadoop.hbase.coprocessor.protobuf.generated.DummyRegionServerEndpointProtos.DummyRequest-com.google.protobuf.RpcCallback-">dummyCall(RpcController, DummyRegionServerEndpointProtos.DummyRequest, RpcCallback&lt;DummyRegionServerEndpointProtos.DummyResponse&gt;)</a></span> - Method in class org.apache.hadoop.hbase.coprocessor.<a href="org/apache/hadoop/hbase/coprocessor/TestRegionServerCoprocessorEndpoint.DummyRegionServerEndpoint.html" title="class in org.apache.hadoop.hbase.coprocessor">TestRegionServerCoprocessorEndpoint.DummyRegionServerEndpoint</a></dt>
@@ -15082,6 +15084,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html#GetThread-org.apache.hadoop.hbase.client.Table-boolean-boolean-">GetThread(Table, boolean, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.GetThread.html" title="class in org.apache.hadoop.hbase.client">TestBlockEvictionFromClient.GetThread</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html#getThreadCount--">getThreadCount()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferArray.DummyByteBufferArray</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/GenericTestUtils.DelayAnswer.html#getThrown--">getThrown()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/GenericTestUtils.DelayAnswer.html" title="class in org.apache.hadoop.hbase">GenericTestUtils.DelayAnswer</a></dt>
 <dd>
 <div class="block">After the call has gone through, return any exception that
@@ -39908,12 +39912,16 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestByteBufferArray.html#TestByteBufferArray--">TestByteBufferArray()</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferArray</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestByteBufferArray.DummyByteBufferArray</span></a> - Class in <a href="org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestByteBufferKeyValue.html#testByteBufferBackedKeyValue--">testByteBufferBackedKeyValue()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">TestByteBufferKeyValue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestByteBufferKeyValue.html#testByteBufferBackedKeyValueWithTags--">testByteBufferBackedKeyValueWithTags()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestByteBufferKeyValue.html" title="class in org.apache.hadoop.hbase">TestByteBufferKeyValue</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestByteBufferArray.html#testByteBufferCreation--">testByteBufferCreation()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferArray</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestByteBufferArray.html#testByteBufferCreation1--">testByteBufferCreation1()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferArray</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestByteBufferIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="typeNameLink">TestByteBufferIOEngine</span></a> - Class in <a href="org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html">org.apache.hadoop.hbase.io.hfile.bucket</a></dt>
 <dd>
 <div class="block">Basic test for <code>ByteBufferIOEngine</code></div>
@@ -46498,6 +46506,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/TestKeyValue.html#testKVsWithTags--">testKVsWithTags()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/TestKeyValue.html" title="class in org.apache.hadoop.hbase">TestKeyValue</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#testL2CacheWithInvalidBucketSize--">testL2CacheWithInvalidBucketSize()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheConfig</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.html#testLABChunkQueue--">testLABChunkQueue()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestMemStoreLAB.html" title="class in org.apache.hadoop.hbase.regionserver">TestMemStoreLAB</a></dt>
 <dd>
 <div class="block">Test frequent chunk retirement with chunk pool triggered by lots of threads, making sure


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
index 0f4afb7..eecbc04 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/package-summary.html
@@ -308,304 +308,308 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferUtils</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferArray.DummyByteBufferArray</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBuffUtils.html" title="class in org.apache.hadoop.hbase.util">TestByteBuffUtils</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferUtils</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteRangeWithKVSerialization.html" title="class in org.apache.hadoop.hbase.util">TestByteRangeWithKVSerialization</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBuffUtils.html" title="class in org.apache.hadoop.hbase.util">TestByteBuffUtils</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestBytes.html" title="class in org.apache.hadoop.hbase.util">TestBytes</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteRangeWithKVSerialization.html" title="class in org.apache.hadoop.hbase.util">TestByteRangeWithKVSerialization</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCompressionTest.html" title="class in org.apache.hadoop.hbase.util">TestCompressionTest</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestBytes.html" title="class in org.apache.hadoop.hbase.util">TestBytes</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestConcatenatedLists.html" title="class in org.apache.hadoop.hbase.util">TestConcatenatedLists</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCompressionTest.html" title="class in org.apache.hadoop.hbase.util">TestCompressionTest</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestConfigurationUtil.html" title="class in org.apache.hadoop.hbase.util">TestConfigurationUtil</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestConcatenatedLists.html" title="class in org.apache.hadoop.hbase.util">TestConcatenatedLists</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestConnectionCache.html" title="class in org.apache.hadoop.hbase.util">TestConnectionCache</a></td>
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestConfigurationUtil.html" title="class in org.apache.hadoop.hbase.util">TestConfigurationUtil</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestConnectionCache.html" title="class in org.apache.hadoop.hbase.util">TestConnectionCache</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCoprocessorClassLoader.html" title="class in org.apache.hadoop.hbase.util">TestCoprocessorClassLoader</a></td>
 <td class="colLast">
 <div class="block">Test TestCoprocessorClassLoader.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.html" title="class in org.apache.hadoop.hbase.util">TestCoprocessorScanPolicy</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.ScanObserver.html" title="class in org.apache.hadoop.hbase.util">TestCoprocessorScanPolicy.ScanObserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestCounter.html" title="class in org.apache.hadoop.hbase.util">TestCounter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestDefaultEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">TestDefaultEnvironmentEdge</a></td>
 <td class="colLast">
 <div class="block">Tests to make sure that the default environment edge conforms to appropriate
  behaviour.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestDrainBarrier.html" title="class in org.apache.hadoop.hbase.util">TestDrainBarrier</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestDynamicClassLoader.html" title="class in org.apache.hadoop.hbase.util">TestDynamicClassLoader</a></td>
 <td class="colLast">
 <div class="block">Test TestDynamicClassLoader</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestEncryptionTest.html" title="class in org.apache.hadoop.hbase.util">TestEncryptionTest</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestEncryptionTest.FailingCipherProvider.html" title="class in org.apache.hadoop.hbase.util">TestEncryptionTest.FailingCipherProvider</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestEncryptionTest.FailingKeyProvider.html" title="class in org.apache.hadoop.hbase.util">TestEncryptionTest.FailingKeyProvider</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestEnvironmentEdgeManager.html" title="class in org.apache.hadoop.hbase.util">TestEnvironmentEdgeManager</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFromClientSide3WoUnsafe.html" title="class in org.apache.hadoop.hbase.util">TestFromClientSide3WoUnsafe</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFSHDFSUtils.html" title="class in org.apache.hadoop.hbase.util">TestFSHDFSUtils</a></td>
 <td class="colLast">
 <div class="block">Test our recoverLease loop against mocked up filesystem.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util">TestFSTableDescriptors</a></td>
 <td class="colLast">
 <div class="block">Tests for <code>FSTableDescriptors</code>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFSTableDescriptors.FSTableDescriptorsTest.html" title="class in org.apache.hadoop.hbase.util">TestFSTableDescriptors.FSTableDescriptorsTest</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFSUtils.html" title="class in org.apache.hadoop.hbase.util">TestFSUtils</a></td>
 <td class="colLast">
 <div class="block">Test <code>FSUtils</code>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestFSVisitor.html" title="class in org.apache.hadoop.hbase.util">TestFSVisitor</a></td>
 <td class="colLast">
 <div class="block">Test <code>FSUtils</code>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckComparator.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckComparator</a></td>
 <td class="colLast">
 <div class="block">Test the comparator used by Hbck.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckEncryption.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckEncryption</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckMOB.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckMOB</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckOneRS</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckReplicas.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckReplicas</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHBaseFsckTwoRS.html" title="class in org.apache.hadoop.hbase.util">TestHBaseFsckTwoRS</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestHFileArchiveUtil.html" title="class in org.apache.hadoop.hbase.util">TestHFileArchiveUtil</a></td>
 <td class="colLast">
 <div class="block">Test that the utility works as expected</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestIdLock.html" title="class in org.apache.hadoop.hbase.util">TestIdLock</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestIdReadWriteLock.html" title="class in org.apache.hadoop.hbase.util">TestIdReadWriteLock</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestIncrementingEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">TestIncrementingEnvironmentEdge</a></td>
 <td class="colLast">
 <div class="block">Tests that the incrementing environment edge increments time instead of using
  the default.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestJSONMetricUtil.html" title="class in org.apache.hadoop.hbase.util">TestJSONMetricUtil</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestKeyLocker.html" title="class in org.apache.hadoop.hbase.util">TestKeyLocker</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestLoadTestKVGenerator.html" title="class in org.apache.hadoop.hbase.util">TestLoadTestKVGenerator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadEncoded.html" title="class in org.apache.hadoop.hbase.util">TestMiniClusterLoadEncoded</a></td>
 <td class="colLast">
 <div class="block">Runs a load test on a mini HBase cluster with data block encoding turned on.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadParallel.html" title="class in org.apache.hadoop.hbase.util">TestMiniClusterLoadParallel</a></td>
 <td class="colLast">
 <div class="block">A write/read/verify load test on a mini HBase cluster.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.html" title="class in org.apache.hadoop.hbase.util">TestMiniClusterLoadSequential</a></td>
 <td class="colLast">
 <div class="block">A write/read/verify load test on a mini HBase cluster.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestOrder.html" title="class in org.apache.hadoop.hbase.util">TestOrder</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestOrderedBytes.html" title="class in org.apache.hadoop.hbase.util">TestOrderedBytes</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestPoolMap.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestPoolMap.TestPoolType.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap.TestPoolType</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestPoolMap.TestReusablePoolType.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap.TestReusablePoolType</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestPoolMap.TestRoundRobinPoolType.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap.TestRoundRobinPoolType</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestPoolMap.TestThreadLocalPoolType.html" title="class in org.apache.hadoop.hbase.util">TestPoolMap.TestThreadLocalPoolType</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionMover.html" title="class in org.apache.hadoop.hbase.util">TestRegionMover</a></td>
 <td class="colLast">
 <div class="block">Tests for Region Mover Load/Unload functionality with and without ack mode and also to test
  exclude functionality useful for rack decommissioning</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSizeCalculator.html" title="class in org.apache.hadoop.hbase.util">TestRegionSizeCalculator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitCalculator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitCalculator.SimpleRange.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitCalculator.SimpleRange</a></td>
 <td class="colLast">
 <div class="block">This is range uses a user specified start and end keys.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRegionSplitter.html" title="class in org.apache.hadoop.hbase.util">TestRegionSplitter</a></td>
 <td class="colLast">
 <div class="block">Tests for <code>RegionSplitter</code>, which can create a pre-split table or do a
  rolling split of an existing table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestRootPath.html" title="class in org.apache.hadoop.hbase.util">TestRootPath</a></td>
 <td class="colLast">
 <div class="block">Test requirement that root directory must be a URI</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestShowProperties.html" title="class in org.apache.hadoop.hbase.util">TestShowProperties</a></td>
 <td class="colLast">
 <div class="block">This test is there to dump the properties.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSimpleMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">TestSimpleMutableByteRange</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSimplePositionedMutableByteRange.html" title="class in org.apache.hadoop.hbase.util">TestSimplePositionedMutableByteRange</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSortedList.html" title="class in org.apache.hadoop.hbase.util">TestSortedList</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestSortedList.StringComparator.html" title="class in org.apache.hadoop.hbase.util">TestSortedList.StringComparator</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestStealJobQueue.html" title="class in org.apache.hadoop.hbase.util">TestStealJobQueue</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestTableName.html" title="class in org.apache.hadoop.hbase.util">TestTableName</a></td>
 <td class="colLast">
 <div class="block">Returns a <code>byte[]</code> containing the name of the currently running test method.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestThreads.html" title="class in org.apache.hadoop.hbase.util">TestThreads</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestVersionInfo.html" title="class in org.apache.hadoop.hbase.util">TestVersionInfo</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TestWeakObjectPool.html" title="class in org.apache.hadoop.hbase.util">TestWeakObjectPool</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/TimeOffsetEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">TimeOffsetEnvironmentEdge</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 7908019..c16ca4a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -131,6 +131,11 @@
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MasterSyncObserver.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">BaseTestHBaseFsck.MasterSyncObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.MasterObserver)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/BaseTestHBaseFsck.MockErrorReporter.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">BaseTestHBaseFsck.MockErrorReporter</span></a> (implements org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/BuilderStyleTest.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">BuilderStyleTest</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.ByteBufferArray
+<ul>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestByteBufferArray.DummyByteBufferArray</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ClassLoaderTestHelper.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">ClassLoaderTestHelper</span></a></li>
 <li type="circle">org.apache.hadoop.conf.Configured (implements org.apache.hadoop.conf.Configurable)
 <ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index 4a1ef11..e6b541b 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -715,6 +715,11 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/BuilderStyleTest.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">BuilderStyleTest</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.comparator.<a href="org/apache/hadoop/hbase/util/comparator/ByteArrayComparator.html" title="class in org.apache.hadoop.hbase.util.comparator"><span class="typeNameLink">ByteArrayComparator</span></a> (implements java.util.<a href="http://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.ByteBufferArray
+<ul>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">TestByteBufferArray.DummyByteBufferArray</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheTestUtils.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheTestUtils</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheTestUtils.ByteArrayCacheable.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheTestUtils.ByteArrayCacheable</span></a> (implements org.apache.hadoop.hbase.io.hfile.Cacheable)</li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheTestUtils.HFileBlockPair.html" title="class in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">CacheTestUtils.HFileBlockPair</span></a></li>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependency-info.html b/hbase-archetypes/dependency-info.html
index f276b41..0176558 100644
--- a/hbase-archetypes/dependency-info.html
+++ b/hbase-archetypes/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependencies.html b/hbase-archetypes/hbase-archetype-builder/dependencies.html
index 96f2aee..b02e512 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependencies.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html b/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
index a32e0d1..7041acd 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependency-info.html b/hbase-archetypes/hbase-archetype-builder/dependency-info.html
index 7db338f..c8074ae 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-info.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependency-management.html b/hbase-archetypes/hbase-archetype-builder/dependency-management.html
index ea64d9f..ba6cec3 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-management.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/index.html b/hbase-archetypes/hbase-archetype-builder/index.html
index 5113f80..bbc7ca9 100644
--- a/hbase-archetypes/hbase-archetype-builder/index.html
+++ b/hbase-archetypes/hbase-archetype-builder/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/integration.html b/hbase-archetypes/hbase-archetype-builder/integration.html
index 87392c1..a6961d8 100644
--- a/hbase-archetypes/hbase-archetype-builder/integration.html
+++ b/hbase-archetypes/hbase-archetype-builder/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/issue-tracking.html b/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
index 6eb0932..1026023 100644
--- a/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
+++ b/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/license.html b/hbase-archetypes/hbase-archetype-builder/license.html
index f259bc9..e021d4d 100644
--- a/hbase-archetypes/hbase-archetype-builder/license.html
+++ b/hbase-archetypes/hbase-archetype-builder/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/mail-lists.html b/hbase-archetypes/hbase-archetype-builder/mail-lists.html
index 9dda974..cc887ec 100644
--- a/hbase-archetypes/hbase-archetype-builder/mail-lists.html
+++ b/hbase-archetypes/hbase-archetype-builder/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/plugin-management.html b/hbase-archetypes/hbase-archetype-builder/plugin-management.html
index a9bbc1b..2b6df72 100644
--- a/hbase-archetypes/hbase-archetype-builder/plugin-management.html
+++ b/hbase-archetypes/hbase-archetype-builder/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/plugins.html b/hbase-archetypes/hbase-archetype-builder/plugins.html
index 5af6d92..0bf25a6 100644
--- a/hbase-archetypes/hbase-archetype-builder/plugins.html
+++ b/hbase-archetypes/hbase-archetype-builder/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/project-info.html b/hbase-archetypes/hbase-archetype-builder/project-info.html
index df160b8..84266b0 100644
--- a/hbase-archetypes/hbase-archetype-builder/project-info.html
+++ b/hbase-archetypes/hbase-archetype-builder/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/project-summary.html b/hbase-archetypes/hbase-archetype-builder/project-summary.html
index d4ac412..3afafd2 100644
--- a/hbase-archetypes/hbase-archetype-builder/project-summary.html
+++ b/hbase-archetypes/hbase-archetype-builder/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/source-repository.html b/hbase-archetypes/hbase-archetype-builder/source-repository.html
index 0320f41..63057b7 100644
--- a/hbase-archetypes/hbase-archetype-builder/source-repository.html
+++ b/hbase-archetypes/hbase-archetype-builder/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-archetype-builder/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/team-list.html b/hbase-archetypes/hbase-archetype-builder/team-list.html
index 6c6d74e..3a9bec1 100644
--- a/hbase-archetypes/hbase-archetype-builder/team-list.html
+++ b/hbase-archetypes/hbase-archetype-builder/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/checkstyle.html b/hbase-archetypes/hbase-client-project/checkstyle.html
index 09b4927..30e5721 100644
--- a/hbase-archetypes/hbase-client-project/checkstyle.html
+++ b/hbase-archetypes/hbase-client-project/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependencies.html b/hbase-archetypes/hbase-client-project/dependencies.html
index bfdcc6a..56eeda1 100644
--- a/hbase-archetypes/hbase-client-project/dependencies.html
+++ b/hbase-archetypes/hbase-client-project/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>
@@ -3454,7 +3454,7 @@ built on Jackson JSON processor</p>
 <td>No</td></tr>
 <tr class="b">
 <td>hbase-common-3.0.0-SNAPSHOT-tests.jar</td>
-<td>273.7 kB</td>
+<td>275.3 kB</td>
 <td>-</td>
 <td>-</td>
 <td>-</td>
@@ -3490,7 +3490,7 @@ built on Jackson JSON processor</p>
 <td>No</td></tr>
 <tr class="b">
 <td>hbase-hadoop2-compat-3.0.0-SNAPSHOT-tests.jar</td>
-<td>34.8 kB</td>
+<td>34.7 kB</td>
 <td>-</td>
 <td>-</td>
 <td>-</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependency-convergence.html b/hbase-archetypes/hbase-client-project/dependency-convergence.html
index eae886f..5eb9495 100644
--- a/hbase-archetypes/hbase-client-project/dependency-convergence.html
+++ b/hbase-archetypes/hbase-client-project/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependency-info.html b/hbase-archetypes/hbase-client-project/dependency-info.html
index ad19edf..908b037 100644
--- a/hbase-archetypes/hbase-client-project/dependency-info.html
+++ b/hbase-archetypes/hbase-client-project/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependency-management.html b/hbase-archetypes/hbase-client-project/dependency-management.html
index 3c61a5c..125264b 100644
--- a/hbase-archetypes/hbase-client-project/dependency-management.html
+++ b/hbase-archetypes/hbase-client-project/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/index.html b/hbase-archetypes/hbase-client-project/index.html
index 2344fd4..3ceb1d2 100644
--- a/hbase-archetypes/hbase-client-project/index.html
+++ b/hbase-archetypes/hbase-client-project/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/integration.html b/hbase-archetypes/hbase-client-project/integration.html
index ab836b7..538e8b1 100644
--- a/hbase-archetypes/hbase-client-project/integration.html
+++ b/hbase-archetypes/hbase-client-project/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/issue-tracking.html b/hbase-archetypes/hbase-client-project/issue-tracking.html
index af86d5f..77b649c 100644
--- a/hbase-archetypes/hbase-client-project/issue-tracking.html
+++ b/hbase-archetypes/hbase-client-project/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/license.html b/hbase-archetypes/hbase-client-project/license.html
index b249bf5..6eaaa96 100644
--- a/hbase-archetypes/hbase-client-project/license.html
+++ b/hbase-archetypes/hbase-client-project/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/mail-lists.html b/hbase-archetypes/hbase-client-project/mail-lists.html
index f13a333..c4953fa 100644
--- a/hbase-archetypes/hbase-client-project/mail-lists.html
+++ b/hbase-archetypes/hbase-client-project/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/plugin-management.html b/hbase-archetypes/hbase-client-project/plugin-management.html
index db15bb4..a9aed66 100644
--- a/hbase-archetypes/hbase-client-project/plugin-management.html
+++ b/hbase-archetypes/hbase-client-project/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/plugins.html b/hbase-archetypes/hbase-client-project/plugins.html
index 8265fcf..c7cc39b 100644
--- a/hbase-archetypes/hbase-client-project/plugins.html
+++ b/hbase-archetypes/hbase-client-project/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/project-reports.html b/hbase-archetypes/hbase-client-project/project-reports.html
index aff3b02..f18c0a6 100644
--- a/hbase-archetypes/hbase-client-project/project-reports.html
+++ b/hbase-archetypes/hbase-client-project/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/project-summary.html b/hbase-archetypes/hbase-client-project/project-summary.html
index 62cbc50..c7475e7 100644
--- a/hbase-archetypes/hbase-client-project/project-summary.html
+++ b/hbase-archetypes/hbase-client-project/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/source-repository.html b/hbase-archetypes/hbase-client-project/source-repository.html
index 07558e1..f9b6d33 100644
--- a/hbase-archetypes/hbase-client-project/source-repository.html
+++ b/hbase-archetypes/hbase-client-project/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-client-project/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/team-list.html b/hbase-archetypes/hbase-client-project/team-list.html
index 63706fd..b107cb7 100644
--- a/hbase-archetypes/hbase-client-project/team-list.html
+++ b/hbase-archetypes/hbase-client-project/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/checkstyle.html b/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
index 6f1eb6b..7a36238 100644
--- a/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
+++ b/hbase-archetypes/hbase-shaded-client-project/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/dependencies.html b/hbase-archetypes/hbase-shaded-client-project/dependencies.html
index a2fc87e..ecea37b 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependencies.html
+++ b/hbase-archetypes/hbase-shaded-client-project/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>
@@ -3469,7 +3469,7 @@ These include: bzip2, gzip, pack200, xz and ar, cpio, jar, tar, zip, dump.</p>
 <td>No</td></tr>
 <tr class="b">
 <td>hbase-common-3.0.0-SNAPSHOT-tests.jar</td>
-<td>273.7 kB</td>
+<td>275.3 kB</td>
 <td>-</td>
 <td>-</td>
 <td>-</td>
@@ -3505,7 +3505,7 @@ These include: bzip2, gzip, pack200, xz and ar, cpio, jar, tar, zip, dump.</p>
 <td>No</td></tr>
 <tr class="b">
 <td>hbase-hadoop2-compat-3.0.0-SNAPSHOT-tests.jar</td>
-<td>34.8 kB</td>
+<td>34.7 kB</td>
 <td>-</td>
 <td>-</td>
 <td>-</td>
@@ -4090,7 +4090,7 @@ These include: bzip2, gzip, pack200, xz and ar, cpio, jar, tar, zip, dump.</p>
 <th>Sealed</th></tr>
 <tr class="a">
 <td>152</td>
-<td>78.6 MB</td>
+<td>78.7 MB</td>
 <td>38062</td>
 <td>33675</td>
 <td>1556</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html b/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
index 9ab3a5b..dcbd705 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
+++ b/hbase-archetypes/hbase-shaded-client-project/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/dependency-info.html b/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
index 2933bde..089daf0 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
+++ b/hbase-archetypes/hbase-shaded-client-project/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/dependency-management.html b/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
index e5318a1..6aecef7 100644
--- a/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
+++ b/hbase-archetypes/hbase-shaded-client-project/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/index.html b/hbase-archetypes/hbase-shaded-client-project/index.html
index b8b478c..51e3e97 100644
--- a/hbase-archetypes/hbase-shaded-client-project/index.html
+++ b/hbase-archetypes/hbase-shaded-client-project/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/integration.html b/hbase-archetypes/hbase-shaded-client-project/integration.html
index 4afd0db..9d10e4e 100644
--- a/hbase-archetypes/hbase-shaded-client-project/integration.html
+++ b/hbase-archetypes/hbase-shaded-client-project/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html b/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
index d7480bf..087ab04 100644
--- a/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
+++ b/hbase-archetypes/hbase-shaded-client-project/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/license.html b/hbase-archetypes/hbase-shaded-client-project/license.html
index d1494d3..355d4ad 100644
--- a/hbase-archetypes/hbase-shaded-client-project/license.html
+++ b/hbase-archetypes/hbase-shaded-client-project/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/mail-lists.html b/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
index 011ce71..ccbc730 100644
--- a/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
+++ b/hbase-archetypes/hbase-shaded-client-project/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/plugin-management.html b/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
index abfc440..2dac17d 100644
--- a/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
+++ b/hbase-archetypes/hbase-shaded-client-project/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/plugins.html b/hbase-archetypes/hbase-shaded-client-project/plugins.html
index 4f90a7e..5a70d22 100644
--- a/hbase-archetypes/hbase-shaded-client-project/plugins.html
+++ b/hbase-archetypes/hbase-shaded-client-project/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/project-info.html b/hbase-archetypes/hbase-shaded-client-project/project-info.html
index 76b28a2..35e83d2 100644
--- a/hbase-archetypes/hbase-shaded-client-project/project-info.html
+++ b/hbase-archetypes/hbase-shaded-client-project/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/project-reports.html b/hbase-archetypes/hbase-shaded-client-project/project-reports.html
index ec2411b..72268d1 100644
--- a/hbase-archetypes/hbase-shaded-client-project/project-reports.html
+++ b/hbase-archetypes/hbase-shaded-client-project/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/hbase-archetypes/hbase-shaded-client-project/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-shaded-client-project/project-summary.html b/hbase-archetypes/hbase-shaded-client-project/project-summary.html
index 4cf22bc..787a2d2 100644
--- a/hbase-archetypes/hbase-shaded-client-project/project-summary.html
+++ b/hbase-archetypes/hbase-shaded-client-project/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-19 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2017-07-20 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2017-07-19</span>
+        <span id="publishDate">Last Published: 2017-07-20</span>
                   &nbsp;| <span id="projectVersion">Version: 3.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-shaded-client archetype">Apache HBase - Exemplar for hbase-shaded-client archetype</a>


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html
index 7a442f0..103cd9e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html
@@ -52,278 +52,285 @@
 <span class="sourceLineNo">044</span> * reading/writing data from this large buffer with a position and offset<a name="line.44"></a>
 <span class="sourceLineNo">045</span> */<a name="line.45"></a>
 <span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public final class ByteBufferArray {<a name="line.47"></a>
+<span class="sourceLineNo">047</span>public class ByteBufferArray {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>  private static final Log LOG = LogFactory.getLog(ByteBufferArray.class);<a name="line.48"></a>
 <span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span>  public static final int DEFAULT_BUFFER_SIZE = 4 * 1024 * 1024;<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  @VisibleForTesting<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  ByteBuffer buffers[];<a name="line.52"></a>
 <span class="sourceLineNo">053</span>  private int bufferSize;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private int bufferCount;<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>   * We allocate a number of byte buffers as the capacity. In order not to out<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   * of the array bounds for the last byte(see {@link ByteBufferArray#multiple}),<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * we will allocate one additional buffer with capacity 0;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * @param capacity total size of the byte buffer array<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * @param directByteBuffer true if we allocate direct buffer<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   * @param allocator the ByteBufferAllocator that will create the buffers<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * @throws IOException throws IOException if there is an exception thrown by the allocator<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  public ByteBufferArray(long capacity, boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      throws IOException {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    this.bufferSize = DEFAULT_BUFFER_SIZE;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    if (this.bufferSize &gt; (capacity / 16))<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      this.bufferSize = (int) roundUp(capacity / 16, 32768);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    this.bufferCount = (int) (roundUp(capacity, bufferSize) / bufferSize);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    LOG.info("Allocating buffers total=" + StringUtils.byteDesc(capacity)<a name="line.71"></a>
-<span class="sourceLineNo">072</span>        + ", sizePerBuffer=" + StringUtils.byteDesc(bufferSize) + ", count="<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        + bufferCount + ", direct=" + directByteBuffer);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    buffers = new ByteBuffer[bufferCount + 1];<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    createBuffers(directByteBuffer, allocator);<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>  private void createBuffers(boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      throws IOException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    int threadCount = Runtime.getRuntime().availableProcessors();<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    ExecutorService service = new ThreadPoolExecutor(threadCount, threadCount, 0L,<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        TimeUnit.MILLISECONDS, new LinkedBlockingQueue&lt;Runnable&gt;());<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    int perThreadCount = Math.round((float) (bufferCount) / threadCount);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    int lastThreadCount = bufferCount - (perThreadCount * (threadCount - 1));<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    Future&lt;ByteBuffer[]&gt;[] futures = new Future[threadCount];<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    try {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      for (int i = 0; i &lt; threadCount; i++) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        // Last thread will have to deal with a different number of buffers<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        int buffersToCreate = (i == threadCount - 1) ? lastThreadCount : perThreadCount;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        futures[i] = service.submit(<a name="line.90"></a>
-<span class="sourceLineNo">091</span>          new BufferCreatorCallable(bufferSize, directByteBuffer, buffersToCreate, allocator));<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      int bufferIndex = 0;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      for (Future&lt;ByteBuffer[]&gt; future : futures) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        try {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>          ByteBuffer[] buffers = future.get();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>          for (ByteBuffer buffer : buffers) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>            this.buffers[bufferIndex++] = buffer;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>          }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        } catch (InterruptedException | ExecutionException e) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>          LOG.error("Buffer creation interrupted", e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>          throw new IOException(e);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    } finally {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      service.shutdownNow();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    // always create on heap empty dummy buffer at last<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    this.buffers[bufferCount] = ByteBuffer.allocate(0);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * A callable that creates buffers of the specified length either onheap/offheap using the<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * {@link ByteBufferAllocator}<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static class BufferCreatorCallable implements Callable&lt;ByteBuffer[]&gt; {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private final int bufferCapacity;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    private final boolean directByteBuffer;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    private final int bufferCount;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    private final ByteBufferAllocator allocator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>    BufferCreatorCallable(int bufferCapacity, boolean directByteBuffer, int bufferCount,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>        ByteBufferAllocator allocator) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      this.bufferCapacity = bufferCapacity;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      this.directByteBuffer = directByteBuffer;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      this.bufferCount = bufferCount;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      this.allocator = allocator;<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 ByteBuffer[] call() throws Exception {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      ByteBuffer[] buffers = new ByteBuffer[this.bufferCount];<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      for (int i = 0; i &lt; this.bufferCount; i++) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        buffers[i] = allocator.allocate(this.bufferCapacity, this.directByteBuffer);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      return buffers;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private long roundUp(long n, long to) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return ((n + to - 1) / to) * to;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param start start position in the ByteBufferArray<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param dstArray The array into which bytes are to be written<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @return number of bytes read<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public int getMultiple(long start, int len, byte[] dstArray) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return getMultiple(start, len, dstArray, 0);<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>   * Transfers bytes from this buffer array into the given destination array<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param start start offset of this buffer array<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @param dstArray The array into which bytes are to be written<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @param dstOffset The offset within the given array of the first byte to be<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   *          written<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @return number of bytes read<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public int getMultiple(long start, int len, byte[] dstArray, int dstOffset) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    multiple(start, len, dstArray, dstOffset, GET_MULTIPLE_VISTOR);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return len;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  private final static Visitor GET_MULTIPLE_VISTOR = new Visitor() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    @Override<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      ByteBufferUtils.copyFromBufferToArray(array, bb, pos, arrayIdx, len);<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">054</span>  @VisibleForTesting<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  int bufferCount;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  /**<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * We allocate a number of byte buffers as the capacity. In order not to out<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * of the array bounds for the last byte(see {@link ByteBufferArray#multiple}),<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * we will allocate one additional buffer with capacity 0;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * @param capacity total size of the byte buffer array<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * @param directByteBuffer true if we allocate direct buffer<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * @param allocator the ByteBufferAllocator that will create the buffers<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   * @throws IOException throws IOException if there is an exception thrown by the allocator<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  public ByteBufferArray(long capacity, boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      throws IOException {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    this.bufferSize = DEFAULT_BUFFER_SIZE;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    if (this.bufferSize &gt; (capacity / 16))<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      this.bufferSize = (int) roundUp(capacity / 16, 32768);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.bufferCount = (int) (roundUp(capacity, bufferSize) / bufferSize);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    LOG.info("Allocating buffers total=" + StringUtils.byteDesc(capacity)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>        + ", sizePerBuffer=" + StringUtils.byteDesc(bufferSize) + ", count="<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        + bufferCount + ", direct=" + directByteBuffer);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    buffers = new ByteBuffer[bufferCount + 1];<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    createBuffers(directByteBuffer, allocator);<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>  @VisibleForTesting<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  void createBuffers(boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      throws IOException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    int threadCount = getThreadCount();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    ExecutorService service = new ThreadPoolExecutor(threadCount, threadCount, 0L,<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        TimeUnit.MILLISECONDS, new LinkedBlockingQueue&lt;Runnable&gt;());<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    int perThreadCount = (int)Math.floor((double) (bufferCount) / threadCount);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    int lastThreadCount = bufferCount - (perThreadCount * (threadCount - 1));<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    Future&lt;ByteBuffer[]&gt;[] futures = new Future[threadCount];<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    try {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      for (int i = 0; i &lt; threadCount; i++) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        // Last thread will have to deal with a different number of buffers<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        int buffersToCreate = (i == threadCount - 1) ? lastThreadCount : perThreadCount;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        futures[i] = service.submit(<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          new BufferCreatorCallable(bufferSize, directByteBuffer, buffersToCreate, allocator));<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      int bufferIndex = 0;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      for (Future&lt;ByteBuffer[]&gt; future : futures) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        try {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>          ByteBuffer[] buffers = future.get();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          for (ByteBuffer buffer : buffers) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            this.buffers[bufferIndex++] = buffer;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>          }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        } catch (InterruptedException | ExecutionException e) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>          LOG.error("Buffer creation interrupted", e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>          throw new IOException(e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    } finally {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      service.shutdownNow();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    // always create on heap empty dummy buffer at last<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    this.buffers[bufferCount] = ByteBuffer.allocate(0);<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>  @VisibleForTesting<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  int getThreadCount() {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    return Runtime.getRuntime().availableProcessors();<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>  /**<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * A callable that creates buffers of the specified length either onheap/offheap using the<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * {@link ByteBufferAllocator}<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static class BufferCreatorCallable implements Callable&lt;ByteBuffer[]&gt; {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    private final int bufferCapacity;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    private final boolean directByteBuffer;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    private final int bufferCount;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    private final ByteBufferAllocator allocator;<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>    BufferCreatorCallable(int bufferCapacity, boolean directByteBuffer, int bufferCount,<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        ByteBufferAllocator allocator) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      this.bufferCapacity = bufferCapacity;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      this.directByteBuffer = directByteBuffer;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      this.bufferCount = bufferCount;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      this.allocator = allocator;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>    @Override<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    public ByteBuffer[] call() throws Exception {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      ByteBuffer[] buffers = new ByteBuffer[this.bufferCount];<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      for (int i = 0; i &lt; this.bufferCount; i++) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        buffers[i] = allocator.allocate(this.bufferCapacity, this.directByteBuffer);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      return buffers;<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>  private long roundUp(long n, long to) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    return ((n + to - 1) / to) * to;<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>  /**<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param start start position in the ByteBufferArray<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param dstArray The array into which bytes are to be written<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return number of bytes read<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  public int getMultiple(long start, int len, byte[] dstArray) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return getMultiple(start, len, dstArray, 0);<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>   * Transfers bytes from this buffer array into the given destination array<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param start start offset of this buffer array<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param dstArray The array into which bytes are to be written<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * @param dstOffset The offset within the given array of the first byte to be<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   *          written<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @return number of bytes read<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public int getMultiple(long start, int len, byte[] dstArray, int dstOffset) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    multiple(start, len, dstArray, dstOffset, GET_MULTIPLE_VISTOR);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    return len;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  /**<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * Transfers bytes from the given source array into this buffer array<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @param start start offset of this buffer array<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @param srcArray The array from which bytes are to be read<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public void putMultiple(long start, int len, byte[] srcArray) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    putMultiple(start, len, srcArray, 0);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  /**<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * Transfers bytes from the given source array into this buffer array<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @param start start offset of this buffer array<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param srcArray The array from which bytes are to be read<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param srcOffset The offset within the given array of the first byte to be<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   *          read<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public void putMultiple(long start, int len, byte[] srcArray, int srcOffset) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    multiple(start, len, srcArray, srcOffset, PUT_MULTIPLE_VISITOR);<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>  private final static Visitor PUT_MULTIPLE_VISITOR = new Visitor() {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      ByteBufferUtils.copyFromArrayToBuffer(bb, pos, array, arrayIdx, len);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  };<a name="line.203"></a>
+<span class="sourceLineNo">176</span>  private final static Visitor GET_MULTIPLE_VISTOR = new Visitor() {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    @Override<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ByteBufferUtils.copyFromBufferToArray(array, bb, pos, arrayIdx, len);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  };<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>  /**<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * Transfers bytes from the given source array into this buffer array<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * @param start start offset of this buffer array<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * @param srcArray The array from which bytes are to be read<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public void putMultiple(long start, int len, byte[] srcArray) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    putMultiple(start, len, srcArray, 0);<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>  /**<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   * Transfers bytes from the given source array into this buffer array<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * @param start start offset of this buffer array<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * @param srcArray The array from which bytes are to be read<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * @param srcOffset The offset within the given array of the first byte to be<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   *          read<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void putMultiple(long start, int len, byte[] srcArray, int srcOffset) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    multiple(start, len, srcArray, srcOffset, PUT_MULTIPLE_VISITOR);<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>  private interface Visitor {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    /**<a name="line.206"></a>
-<span class="sourceLineNo">207</span>     * Visit the given byte buffer, if it is a read action, we will transfer the<a name="line.207"></a>
-<span class="sourceLineNo">208</span>     * bytes from the buffer to the destination array, else if it is a write<a name="line.208"></a>
-<span class="sourceLineNo">209</span>     * action, we will transfer the bytes from the source array to the buffer<a name="line.209"></a>
-<span class="sourceLineNo">210</span>     * @param bb byte buffer<a name="line.210"></a>
-<span class="sourceLineNo">211</span>     * @param pos Start position in ByteBuffer<a name="line.211"></a>
-<span class="sourceLineNo">212</span>     * @param array a source or destination byte array<a name="line.212"></a>
-<span class="sourceLineNo">213</span>     * @param arrayOffset offset of the byte array<a name="line.213"></a>
-<span class="sourceLineNo">214</span>     * @param len read/write length<a name="line.214"></a>
-<span class="sourceLineNo">215</span>     */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    void visit(ByteBuffer bb, int pos, byte[] array, int arrayOffset, int len);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * Access(read or write) this buffer array with a position and length as the<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * given array. Here we will only lock one buffer even if it may be need visit<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * several buffers. The consistency is guaranteed by the caller.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param start start offset of this buffer array<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param len The maximum number of bytes to be accessed<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param array The array from/to which bytes are to be read/written<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param arrayOffset The offset within the given array of the first byte to<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   *          be read or written<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @param visitor implement of how to visit the byte buffer<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  void multiple(long start, int len, byte[] array, int arrayOffset, Visitor visitor) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    assert len &gt;= 0;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    long end = start + len;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    int startBuffer = (int) (start / bufferSize), startOffset = (int) (start % bufferSize);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    int endBuffer = (int) (end / bufferSize), endOffset = (int) (end % bufferSize);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    assert array.length &gt;= len + arrayOffset;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        || (endBuffer == bufferCount &amp;&amp; endOffset == 0);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      String msg = "Failed multiple, start=" + start + ",startBuffer="<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          + startBuffer + ",bufferSize=" + bufferSize;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      LOG.error(msg);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      throw new RuntimeException(msg);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    int srcIndex = 0, cnt = -1;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    for (int i = startBuffer; i &lt;= endBuffer; ++i) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      int pos = 0;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (i == startBuffer) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        cnt = bufferSize - startOffset;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        if (cnt &gt; len) cnt = len;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        pos = startOffset;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      } else if (i == endBuffer) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        cnt = endOffset;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      } else {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        cnt = bufferSize;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      visitor.visit(bb, pos, array, srcIndex + arrayOffset, cnt);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      srcIndex += cnt;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    assert srcIndex == len;<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>  /**<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * Creates a ByteBuff from a given array of ByteBuffers from the given offset to the<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * length specified. For eg, if there are 4 buffers forming an array each with length 10 and<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * if we call asSubBuffer(5, 10) then we will create an MBB consisting of two BBs<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * and the first one be a BB from 'position' 5 to a 'length' 5 and the 2nd BB will be from<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * 'position' 0 to 'length' 5.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * @param offset<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * @param len<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * @return a ByteBuff formed from the underlying ByteBuffers<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public ByteBuff asSubByteBuff(long offset, int len) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assert len &gt;= 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    long end = offset + len;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int startBuffer = (int) (offset / bufferSize), startBufferOffset = (int) (offset % bufferSize);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    int endBuffer = (int) (end / bufferSize), endBufferOffset = (int) (end % bufferSize);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // Last buffer in the array is a dummy one with 0 capacity. Avoid sending back that<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    if (endBuffer == this.bufferCount) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      endBuffer--;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      endBufferOffset = bufferSize;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        || (endBuffer == bufferCount &amp;&amp; endBufferOffset == 0);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      String msg = "Failed subArray, start=" + offset + ",startBuffer=" + startBuffer<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          + ",bufferSize=" + bufferSize;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.error(msg);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      throw new RuntimeException(msg);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    int srcIndex = 0, cnt = -1;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    ByteBuffer[] mbb = new ByteBuffer[endBuffer - startBuffer + 1];<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    for (int i = startBuffer, j = 0; i &lt;= endBuffer; ++i, j++) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      if (i == startBuffer) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        cnt = bufferSize - startBufferOffset;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        if (cnt &gt; len) cnt = len;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        bb.limit(startBufferOffset + cnt).position(startBufferOffset);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      } else if (i == endBuffer) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        cnt = endBufferOffset;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        bb.position(0).limit(cnt);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      } else {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        cnt = bufferSize;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        bb.position(0).limit(cnt);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      mbb[j] = bb.slice();<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      srcIndex += cnt;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    assert srcIndex == len;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    if (mbb.length &gt; 1) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      return new MultiByteBuff(mbb);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    } else {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      return new SingleByteBuff(mbb[0]);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>}<a name="line.318"></a>
+<span class="sourceLineNo">205</span>  private final static Visitor PUT_MULTIPLE_VISITOR = new Visitor() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    @Override<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      ByteBufferUtils.copyFromArrayToBuffer(bb, pos, array, arrayIdx, len);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  };<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private interface Visitor {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>     * Visit the given byte buffer, if it is a read action, we will transfer the<a name="line.214"></a>
+<span class="sourceLineNo">215</span>     * bytes from the buffer to the destination array, else if it is a write<a name="line.215"></a>
+<span class="sourceLineNo">216</span>     * action, we will transfer the bytes from the source array to the buffer<a name="line.216"></a>
+<span class="sourceLineNo">217</span>     * @param bb byte buffer<a name="line.217"></a>
+<span class="sourceLineNo">218</span>     * @param pos Start position in ByteBuffer<a name="line.218"></a>
+<span class="sourceLineNo">219</span>     * @param array a source or destination byte array<a name="line.219"></a>
+<span class="sourceLineNo">220</span>     * @param arrayOffset offset of the byte array<a name="line.220"></a>
+<span class="sourceLineNo">221</span>     * @param len read/write length<a name="line.221"></a>
+<span class="sourceLineNo">222</span>     */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    void visit(ByteBuffer bb, int pos, byte[] array, int arrayOffset, int len);<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>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * Access(read or write) this buffer array with a position and length as the<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * given array. Here we will only lock one buffer even if it may be need visit<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * several buffers. The consistency is guaranteed by the caller.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param start start offset of this buffer array<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param len The maximum number of bytes to be accessed<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param array The array from/to which bytes are to be read/written<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @param arrayOffset The offset within the given array of the first byte to<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   *          be read or written<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param visitor implement of how to visit the byte buffer<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  void multiple(long start, int len, byte[] array, int arrayOffset, Visitor visitor) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    assert len &gt;= 0;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    long end = start + len;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    int startBuffer = (int) (start / bufferSize), startOffset = (int) (start % bufferSize);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    int endBuffer = (int) (end / bufferSize), endOffset = (int) (end % bufferSize);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assert array.length &gt;= len + arrayOffset;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        || (endBuffer == bufferCount &amp;&amp; endOffset == 0);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      String msg = "Failed multiple, start=" + start + ",startBuffer="<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          + startBuffer + ",bufferSize=" + bufferSize;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      LOG.error(msg);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      throw new RuntimeException(msg);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    int srcIndex = 0, cnt = -1;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    for (int i = startBuffer; i &lt;= endBuffer; ++i) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      int pos = 0;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      if (i == startBuffer) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        cnt = bufferSize - startOffset;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (cnt &gt; len) cnt = len;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        pos = startOffset;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      } else if (i == endBuffer) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        cnt = endOffset;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      } else {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        cnt = bufferSize;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      visitor.visit(bb, pos, array, srcIndex + arrayOffset, cnt);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      srcIndex += cnt;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    assert srcIndex == len;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  /**<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * Creates a ByteBuff from a given array of ByteBuffers from the given offset to the<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * length specified. For eg, if there are 4 buffers forming an array each with length 10 and<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * if we call asSubBuffer(5, 10) then we will create an MBB consisting of two BBs<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * and the first one be a BB from 'position' 5 to a 'length' 5 and the 2nd BB will be from<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * 'position' 0 to 'length' 5.<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @param offset<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @param len<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @return a ByteBuff formed from the underlying ByteBuffers<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   */<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public ByteBuff asSubByteBuff(long offset, int len) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    assert len &gt;= 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    long end = offset + len;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    int startBuffer = (int) (offset / bufferSize), startBufferOffset = (int) (offset % bufferSize);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    int endBuffer = (int) (end / bufferSize), endBufferOffset = (int) (end % bufferSize);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    // Last buffer in the array is a dummy one with 0 capacity. Avoid sending back that<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (endBuffer == this.bufferCount) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      endBuffer--;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      endBufferOffset = bufferSize;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        || (endBuffer == bufferCount &amp;&amp; endBufferOffset == 0);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      String msg = "Failed subArray, start=" + offset + ",startBuffer=" + startBuffer<a name="line.295"></a>
+<span class="sourceLineNo">296</span>          + ",bufferSize=" + bufferSize;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.error(msg);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      throw new RuntimeException(msg);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    int srcIndex = 0, cnt = -1;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    ByteBuffer[] mbb = new ByteBuffer[endBuffer - startBuffer + 1];<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    for (int i = startBuffer, j = 0; i &lt;= endBuffer; ++i, j++) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      if (i == startBuffer) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        cnt = bufferSize - startBufferOffset;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        if (cnt &gt; len) cnt = len;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        bb.limit(startBufferOffset + cnt).position(startBufferOffset);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      } else if (i == endBuffer) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        cnt = endBufferOffset;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        bb.position(0).limit(cnt);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      } else {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        cnt = bufferSize;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        bb.position(0).limit(cnt);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      mbb[j] = bb.slice();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      srcIndex += cnt;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    assert srcIndex == len;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    if (mbb.length &gt; 1) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return new MultiByteBuff(mbb);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    } else {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new SingleByteBuff(mbb[0]);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>}<a name="line.325"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 1c40eee..46d84d9 100644
--- a/export_control.html
+++ b/export_control.html
@@ -7,7 +7,7 @@
   <head>
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-    <meta name="Date-Revision-yyyymmdd" content="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -336,7 +336,7 @@ for more details.</p>
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
index 9d284a3..cfca4f2 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html
@@ -121,7 +121,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.105">TestCacheConfig.DataCacheEntry</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.106">TestCacheConfig.DataCacheEntry</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 </li>
@@ -260,7 +260,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>SIZE</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.106">SIZE</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.107">SIZE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.TestCacheConfig.DataCacheEntry.SIZE">Constant Field Values</a></dd>
@@ -273,7 +273,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>SINGLETON</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheConfig.DataCacheEntry</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.107">SINGLETON</a></pre>
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheConfig.DataCacheEntry</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.108">SINGLETON</a></pre>
 </li>
 </ul>
 <a name="deserializer">
@@ -282,7 +282,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>deserializer</h4>
-<pre>final&nbsp;org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.hadoop.hbase.io.hfile.Cacheable&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.108">deserializer</a></pre>
+<pre>final&nbsp;org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.hadoop.hbase.io.hfile.Cacheable&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.109">deserializer</a></pre>
 </li>
 </ul>
 </li>
@@ -299,7 +299,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>DataCacheEntry</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.110">DataCacheEntry</a>()</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.111">DataCacheEntry</a>()</pre>
 </li>
 </ul>
 <a name="DataCacheEntry-org.apache.hadoop.hbase.io.hfile.Cacheable-">
@@ -308,7 +308,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DataCacheEntry</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.114">DataCacheEntry</a>(org.apache.hadoop.hbase.io.hfile.Cacheable&nbsp;c)</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.115">DataCacheEntry</a>(org.apache.hadoop.hbase.io.hfile.Cacheable&nbsp;c)</pre>
 </li>
 </ul>
 </li>
@@ -325,7 +325,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.119">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.120">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -338,7 +338,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.124">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.125">heapSize</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>heapSize</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.io.HeapSize</code></dd>
@@ -351,7 +351,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getSerializedLength</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.129">getSerializedLength</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.130">getSerializedLength</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getSerializedLength</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.io.hfile.Cacheable</code></dd>
@@ -364,7 +364,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>serialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.134">serialize</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;destination)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.135">serialize</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;destination)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>serialize</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.io.hfile.Cacheable</code></dd>
@@ -377,7 +377,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getDeserializer</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.hadoop.hbase.io.hfile.Cacheable&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.139">getDeserializer</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.hadoop.hbase.io.hfile.Cacheable&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.140">getDeserializer</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getDeserializer</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.io.hfile.Cacheable</code></dd>
@@ -390,7 +390,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockType</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.BlockType&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.144">getBlockType</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.BlockType&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.145">getBlockType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getBlockType</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.io.hfile.Cacheable</code></dd>
@@ -403,7 +403,7 @@ implements org.apache.hadoop.hbase.io.hfile.Cacheable</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getMemoryType</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.149">getMemoryType</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html#line.150">getMemoryType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getMemoryType</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.io.hfile.Cacheable</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
index 12e6afa..c05c25a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.65">TestCacheConfig.Deserializer</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.66">TestCacheConfig.Deserializer</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.hadoop.hbase.io.hfile.Cacheable&gt;</pre>
 </li>
@@ -220,7 +220,7 @@ implements org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheable</h4>
-<pre>private final&nbsp;org.apache.hadoop.hbase.io.hfile.Cacheable <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.66">cacheable</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.hbase.io.hfile.Cacheable <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.67">cacheable</a></pre>
 </li>
 </ul>
 <a name="deserializedIdentifier">
@@ -229,7 +229,7 @@ implements org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>deserializedIdentifier</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.67">deserializedIdentifier</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.68">deserializedIdentifier</a></pre>
 </li>
 </ul>
 </li>
@@ -246,7 +246,7 @@ implements org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Deserializer</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.69">Deserializer</a>(org.apache.hadoop.hbase.io.hfile.Cacheable&nbsp;c)</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.70">Deserializer</a>(org.apache.hadoop.hbase.io.hfile.Cacheable&nbsp;c)</pre>
 </li>
 </ul>
 </li>
@@ -263,7 +263,7 @@ implements org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.
 <ul class="blockList">
 <li class="blockList">
 <h4>getDeserialiserIdentifier</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.75">getDeserialiserIdentifier</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.76">getDeserialiserIdentifier</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getDeserialiserIdentifier</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.hadoop.hbase.io.hfile.Cacheable&gt;</code></dd>
@@ -276,7 +276,7 @@ implements org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.
 <ul class="blockList">
 <li class="blockList">
 <h4>deserialize</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.Cacheable&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.80">deserialize</a>(org.apache.hadoop.hbase.nio.ByteBuff&nbsp;b,
+<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.Cacheable&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.81">deserialize</a>(org.apache.hadoop.hbase.nio.ByteBuff&nbsp;b,
                                                               boolean&nbsp;reuse,
                                                               org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType&nbsp;memType)
                                                        throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -294,7 +294,7 @@ implements org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;org.apache.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>deserialize</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.Cacheable&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.86">deserialize</a>(org.apache.hadoop.hbase.nio.ByteBuff&nbsp;b)
+<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.Cacheable&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html#line.87">deserialize</a>(org.apache.hadoop.hbase.nio.ByteBuff&nbsp;b)
                                                        throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
index 068c67c..d029b5c 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.92">TestCacheConfig.IndexCacheEntry</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.93">TestCacheConfig.IndexCacheEntry</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheConfig.DataCacheEntry</a></pre>
 </li>
 </ul>
@@ -239,7 +239,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheCon
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SINGLETON</h4>
-<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheConfig.IndexCacheEntry</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html#line.93">SINGLETON</a></pre>
+<pre>private static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheConfig.IndexCacheEntry</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html#line.94">SINGLETON</a></pre>
 </li>
 </ul>
 </li>
@@ -256,7 +256,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheCon
 <ul class="blockListLast">
 <li class="blockList">
 <h4>IndexCacheEntry</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html#line.95">IndexCacheEntry</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html#line.96">IndexCacheEntry</a>()</pre>
 </li>
 </ul>
 </li>
@@ -273,7 +273,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheCon
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getBlockType</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.BlockType&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html#line.100">getBlockType</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.BlockType&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html#line.101">getBlockType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getBlockType</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.io.hfile.Cacheable</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
index a516213..4a92d8a 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.154">TestCacheConfig.MetaCacheEntry</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.155">TestCacheConfig.MetaCacheEntry</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheConfig.DataCacheEntry.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheConfig.DataCacheEntry</a></pre>
 </li>
 </ul>
@@ -228,7 +228,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheCon
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetaCacheEntry</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html#line.154">MetaCacheEntry</a>()</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html#line.155">MetaCacheEntry</a>()</pre>
 </li>
 </ul>
 </li>
@@ -245,7 +245,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheCon
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getBlockType</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.BlockType&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html#line.156">getBlockType</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.io.hfile.BlockType&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html#line.157">getBlockType</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getBlockType</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.io.hfile.Cacheable</code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
index bd80e65..8c3ad84 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.61">TestCacheConfig</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.62">TestCacheConfig</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Tests that <code>CacheConfig</code> does as expected.</div>
 </li>
@@ -256,11 +256,15 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </tr>
 <tr id="i11" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#testL2CacheWithInvalidBucketSize--">testL2CacheWithInvalidBucketSize</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#testOffHeapBucketCacheConfig--">testOffHeapBucketCacheConfig</a></span>()</code>
 <div class="block">Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.</div>
 </td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#testOnHeapBucketCacheConfig--">testOnHeapBucketCacheConfig</a></span>()</code>&nbsp;</td>
 </tr>
@@ -292,7 +296,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.62">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.63">LOG</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -301,7 +305,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.63">conf</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.64">conf</a></pre>
 </li>
 </ul>
 </li>
@@ -318,7 +322,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestCacheConfig</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.61">TestCacheConfig</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.62">TestCacheConfig</a>()</pre>
 </li>
 </ul>
 </li>
@@ -335,7 +339,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setUp</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.162">setUp</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.163">setUp</a>()
            throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -349,7 +353,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.168">tearDown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.169">tearDown</a>()
               throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -363,7 +367,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>basicBlockCacheOps</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.179">basicBlockCacheOps</a>(org.apache.hadoop.hbase.io.hfile.CacheConfig&nbsp;cc,
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.180">basicBlockCacheOps</a>(org.apache.hadoop.hbase.io.hfile.CacheConfig&nbsp;cc,
                         boolean&nbsp;doubling,
                         boolean&nbsp;sizing)</pre>
 <dl>
@@ -381,7 +385,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheDataBlock</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.209">cacheDataBlock</a>(org.apache.hadoop.hbase.io.hfile.CacheConfig&nbsp;cc,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.210">cacheDataBlock</a>(org.apache.hadoop.hbase.io.hfile.CacheConfig&nbsp;cc,
                             <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filename)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -397,7 +401,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testDisableCacheDataBlock</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.218">testDisableCacheDataBlock</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.219">testDisableCacheDataBlock</a>()
                                throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -411,7 +415,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testCacheConfigDefaultLRUBlockCache</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.284">testCacheConfigDefaultLRUBlockCache</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.285">testCacheConfigDefaultLRUBlockCache</a>()</pre>
 </li>
 </ul>
 <a name="testOffHeapBucketCacheConfig--">
@@ -420,7 +424,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testOffHeapBucketCacheConfig</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.296">testOffHeapBucketCacheConfig</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.297">testOffHeapBucketCacheConfig</a>()</pre>
 <div class="block">Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.</div>
 </li>
 </ul>
@@ -430,7 +434,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testOnHeapBucketCacheConfig</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.302">testOnHeapBucketCacheConfig</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.303">testOnHeapBucketCacheConfig</a>()</pre>
 </li>
 </ul>
 <a name="testFileBucketCacheConfig--">
@@ -439,7 +443,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFileBucketCacheConfig</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.308">testFileBucketCacheConfig</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.309">testFileBucketCacheConfig</a>()
                                throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -453,7 +457,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>doBucketCacheConfigTest</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.321">doBucketCacheConfigTest</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.322">doBucketCacheConfigTest</a>()</pre>
 </li>
 </ul>
 <a name="testBucketCacheConfigL1L2Setup--">
@@ -462,7 +466,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testBucketCacheConfigL1L2Setup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.344">testBucketCacheConfigL1L2Setup</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.345">testBucketCacheConfigL1L2Setup</a>()</pre>
 <div class="block">Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy
  LruBlockCache as L1 with a BucketCache for L2.</div>
 </li>
@@ -473,18 +477,27 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testCacheDataInL1</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.398">testCacheDataInL1</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.399">testCacheDataInL1</a>()</pre>
 <div class="block">Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in
  LruBlockCache when using CombinedBlockCcahe.</div>
 </li>
 </ul>
+<a name="testL2CacheWithInvalidBucketSize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testL2CacheWithInvalidBucketSize</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.419">testL2CacheWithInvalidBucketSize</a>()</pre>
+</li>
+</ul>
 <a name="assertDataBlockCount-org.apache.hadoop.hbase.io.hfile.LruBlockCache-int-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>assertDataBlockCount</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.417">assertDataBlockCount</a>(org.apache.hadoop.hbase.io.hfile.LruBlockCache&nbsp;bc,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.html#line.431">assertDataBlockCount</a>(org.apache.hadoop.hbase.io.hfile.LruBlockCache&nbsp;bc,
                                   int&nbsp;expected)</pre>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 451a7e3..eed5434 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -205,9 +205,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 </ul>
 </li>
 </ul>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index ce0cfd1..48d8abf 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -248,9 +248,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html
new file mode 100644
index 0000000..92eb53c
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html
@@ -0,0 +1,316 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<!-- Generated by javadoc -->
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestByteBufferArray.DummyByteBufferArray (Apache HBase 3.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="TestByteBufferArray.DummyByteBufferArray (Apache HBase 3.0.0-SNAPSHOT Test API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestByteBufferArray.DummyByteBufferArray.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/util/TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" target="_top">Frames</a></li>
+<li><a href="TestByteBufferArray.DummyByteBufferArray.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.util.ByteBufferArray">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="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.util</div>
+<h2 title="Class TestByteBufferArray.DummyByteBufferArray" class="title">Class TestByteBufferArray.DummyByteBufferArray</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.util.ByteBufferArray</li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.util.TestByteBufferArray.DummyByteBufferArray</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferArray</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html#line.109">TestByteBufferArray.DummyByteBufferArray</a>
+extends org.apache.hadoop.hbase.util.ByteBufferArray</pre>
+</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>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.util.ByteBufferArray">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.util.ByteBufferArray</h3>
+<code>bufferCount, buffers, DEFAULT_BUFFER_SIZE</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html#DummyByteBufferArray-long-boolean-org.apache.hadoop.hbase.util.ByteBufferAllocator-">DummyByteBufferArray</a></span>(long&nbsp;capacity,
+                    boolean&nbsp;directByteBuffer,
+                    org.apache.hadoop.hbase.util.ByteBufferAllocator&nbsp;allocator)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>(package private) int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html#getThreadCount--">getThreadCount</a></span>()</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.util.ByteBufferArray">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.util.ByteBufferArray</h3>
+<code>asSubByteBuff, createBuffers, getMultiple, getMultiple, multiple, putMultiple, putMultiple</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang
 /Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="DummyByteBufferArray-long-boolean-org.apache.hadoop.hbase.util.ByteBufferAllocator-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>DummyByteBufferArray</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html#line.111">DummyByteBufferArray</a>(long&nbsp;capacity,
+                            boolean&nbsp;directByteBuffer,
+                            org.apache.hadoop.hbase.util.ByteBufferAllocator&nbsp;allocator)
+                     throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getThreadCount--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>getThreadCount</h4>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html#line.117">getThreadCount</a>()</pre>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>getThreadCount</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.util.ByteBufferArray</code></dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="class-use/TestByteBufferArray.DummyByteBufferArray.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/util/TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" target="_top">Frames</a></li>
+<li><a href="TestByteBufferArray.DummyByteBufferArray.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#fields.inherited.from.class.org.apache.hadoop.hbase.util.ByteBufferArray">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="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.html
index 3a45d86..35b56fa 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10};
+var methods = {"i0":10,"i1":10,"i2":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -50,7 +50,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.TestObjectComparator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestByteBufferArray.html" target="_top">Frames</a></li>
@@ -74,7 +74,7 @@ var activeTableTab = "activeTableTab";
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
 <li>Field&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
@@ -117,6 +117,25 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="summary">
 <ul class="blockList">
 <li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">TestByteBufferArray.DummyByteBufferArray</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
 <!-- ======== CONSTRUCTOR SUMMARY ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor.summary">
@@ -154,6 +173,10 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.html#testByteBufferCreation--">testByteBufferCreation</a></span>()</code>&nbsp;</td>
 </tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.html#testByteBufferCreation1--">testByteBufferCreation1</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -210,7 +233,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <a name="testByteBufferCreation--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testByteBufferCreation</h4>
 <pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html#line.60">testByteBufferCreation</a>()
@@ -221,6 +244,20 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </dl>
 </li>
 </ul>
+<a name="testByteBufferCreation1--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testByteBufferCreation1</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html#line.84">testByteBufferCreation1</a>()
+                             throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>
@@ -250,7 +287,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/util/TestBoundedPriorityBlockingQueue.TestObjectComparator.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/TestByteBufferArray.html" target="_top">Frames</a></li>
@@ -274,7 +311,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#nested.class.summary">Nested</a>&nbsp;|&nbsp;</li>
 <li>Field&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferUtils.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferUtils.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferUtils.html
index 9fb98e8..1256b5d 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferUtils.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferUtils.html
@@ -49,7 +49,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBuffUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -820,7 +820,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/util/TestByteBuffUtils.html" title="class in org.apache.hadoop.hbase.util"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
index 9031523..61b8c34 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/package-frame.html
@@ -55,6 +55,7 @@
 <li><a href="TestBloomFilterChunk.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBloomFilterChunk</a></li>
 <li><a href="TestBoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestBoundedPriorityBlockingQueue</a></li>
 <li><a href="TestByteBufferArray.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestByteBufferArray</a></li>
+<li><a href="TestByteBufferArray.DummyByteBufferArray.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestByteBufferArray.DummyByteBufferArray</a></li>
 <li><a href="TestByteBufferUtils.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestByteBufferUtils</a></li>
 <li><a href="TestByteBuffUtils.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestByteBuffUtils</a></li>
 <li><a href="TestByteRangeWithKVSerialization.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">TestByteRangeWithKVSerialization</a></li>


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

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


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

Branch: refs/heads/asf-site
Commit: 9e6e3360a806c847f8cf0df364f6c5dd40674b4f
Parents: 95b5168
Author: jenkins <bu...@apache.org>
Authored: Thu Jul 20 22:06:59 2017 +0000
Committer: jenkins <bu...@apache.org>
Committed: Thu Jul 20 22:06:59 2017 +0000

----------------------------------------------------------------------
 acid-semantics.html                             |    4 +-
 apache_hbase_reference_guide.pdf                | 8460 +++++++++---------
 book.html                                       |    2 +-
 bulk-loads.html                                 |    4 +-
 checkstyle-aggregate.html                       |   54 +-
 coc.html                                        |    4 +-
 cygwin.html                                     |    4 +-
 dependencies.html                               |    4 +-
 dependency-convergence.html                     |    4 +-
 dependency-info.html                            |    4 +-
 dependency-management.html                      |    4 +-
 devapidocs/constant-values.html                 |    6 +-
 devapidocs/index-all.html                       |    2 +
 .../hbase/classification/package-tree.html      |    6 +-
 .../hadoop/hbase/client/package-tree.html       |   22 +-
 .../hadoop/hbase/filter/package-tree.html       |    6 +-
 .../hadoop/hbase/io/hfile/CacheConfig.html      |   12 +-
 .../hbase/io/hfile/class-use/BlockCache.html    |    2 +-
 .../hadoop/hbase/io/hfile/package-tree.html     |    4 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |    4 +-
 ...onZKNodeCleaner.ReplicationQueueDeletor.html |   10 +-
 .../cleaner/ReplicationZKNodeCleaner.html       |    6 +-
 .../hadoop/hbase/master/package-tree.html       |    6 +-
 .../hbase/master/procedure/package-tree.html    |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html   |   12 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    4 +-
 .../hadoop/hbase/quotas/package-tree.html       |    6 +-
 .../hadoop/hbase/regionserver/package-tree.html |   18 +-
 .../regionserver/querymatcher/package-tree.html |    4 +-
 .../hbase/regionserver/wal/package-tree.html    |    2 +-
 ...DumpReplicationQueues.WarnOnlyAbortable.html |    8 +-
 ...DumpReplicationQueues.WarnOnlyStoppable.html |    8 +-
 .../regionserver/DumpReplicationQueues.html     |    4 +-
 .../replication/regionserver/package-tree.html  |    2 +-
 .../hadoop/hbase/security/package-tree.html     |    2 +-
 .../hadoop/hbase/thrift/package-tree.html       |    2 +-
 .../ByteBufferArray.BufferCreatorCallable.html  |   14 +-
 .../hbase/util/ByteBufferArray.Visitor.html     |    4 +-
 .../hadoop/hbase/util/ByteBufferArray.html      |   55 +-
 .../util/class-use/ByteBufferAllocator.html     |    2 +-
 .../apache/hadoop/hbase/util/package-tree.html  |   10 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/Version.html        |    6 +-
 .../hfile/CacheConfig.ExternalBlockCaches.html  |  265 +-
 .../hadoop/hbase/io/hfile/CacheConfig.html      |  265 +-
 ...onZKNodeCleaner.ReplicationQueueDeletor.html |  249 +-
 .../cleaner/ReplicationZKNodeCleaner.html       |  249 +-
 .../replication/ReplicationPeersZKImpl.html     |   45 +-
 .../ReplicationQueuesClientZKImpl.html          |    2 +-
 .../DumpReplicationQueues.DumpOptions.html      |  223 +-
 ...DumpReplicationQueues.WarnOnlyAbortable.html |  223 +-
 ...DumpReplicationQueues.WarnOnlyStoppable.html |  223 +-
 .../regionserver/DumpReplicationQueues.html     |  223 +-
 .../ByteBufferArray.BufferCreatorCallable.html  |  535 +-
 .../hbase/util/ByteBufferArray.Visitor.html     |  535 +-
 .../hadoop/hbase/util/ByteBufferArray.html      |  535 +-
 export_control.html                             |    4 +-
 hbase-annotations/checkstyle.html               |    6 +-
 hbase-annotations/dependencies.html             |    6 +-
 hbase-annotations/dependency-convergence.html   |    6 +-
 hbase-annotations/dependency-info.html          |    6 +-
 hbase-annotations/dependency-management.html    |    6 +-
 hbase-annotations/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/dependencies.html              |    6 +-
 hbase-archetypes/dependency-convergence.html    |    6 +-
 hbase-archetypes/dependency-info.html           |    6 +-
 hbase-archetypes/dependency-management.html     |    6 +-
 .../hbase-archetype-builder/dependencies.html   |    6 +-
 .../dependency-convergence.html                 |    6 +-
 .../dependency-info.html                        |    6 +-
 .../dependency-management.html                  |    6 +-
 .../hbase-archetype-builder/index.html          |    6 +-
 .../hbase-archetype-builder/integration.html    |    6 +-
 .../hbase-archetype-builder/issue-tracking.html |    6 +-
 .../hbase-archetype-builder/license.html        |    6 +-
 .../hbase-archetype-builder/mail-lists.html     |    6 +-
 .../plugin-management.html                      |    6 +-
 .../hbase-archetype-builder/plugins.html        |    6 +-
 .../hbase-archetype-builder/project-info.html   |    6 +-
 .../project-summary.html                        |    6 +-
 .../source-repository.html                      |    6 +-
 .../hbase-archetype-builder/team-list.html      |    6 +-
 .../hbase-client-project/checkstyle.html        |    6 +-
 .../hbase-client-project/dependencies.html      |   10 +-
 .../dependency-convergence.html                 |    6 +-
 .../hbase-client-project/dependency-info.html   |    6 +-
 .../dependency-management.html                  |    6 +-
 .../hbase-client-project/index.html             |    6 +-
 .../hbase-client-project/integration.html       |    6 +-
 .../hbase-client-project/issue-tracking.html    |    6 +-
 .../hbase-client-project/license.html           |    6 +-
 .../hbase-client-project/mail-lists.html        |    6 +-
 .../hbase-client-project/plugin-management.html |    6 +-
 .../hbase-client-project/plugins.html           |    6 +-
 .../hbase-client-project/project-info.html      |    6 +-
 .../hbase-client-project/project-reports.html   |    6 +-
 .../hbase-client-project/project-summary.html   |    6 +-
 .../hbase-client-project/source-repository.html |    6 +-
 .../hbase-client-project/team-list.html         |    6 +-
 .../hbase-shaded-client-project/checkstyle.html |    6 +-
 .../dependencies.html                           |   12 +-
 .../dependency-convergence.html                 |    6 +-
 .../dependency-info.html                        |    6 +-
 .../dependency-management.html                  |    6 +-
 .../hbase-shaded-client-project/index.html      |    6 +-
 .../integration.html                            |    6 +-
 .../issue-tracking.html                         |    6 +-
 .../hbase-shaded-client-project/license.html    |    6 +-
 .../hbase-shaded-client-project/mail-lists.html |    6 +-
 .../plugin-management.html                      |    6 +-
 .../hbase-shaded-client-project/plugins.html    |    6 +-
 .../project-info.html                           |    6 +-
 .../project-reports.html                        |    6 +-
 .../project-summary.html                        |    6 +-
 .../source-repository.html                      |    6 +-
 .../hbase-shaded-client-project/team-list.html  |    6 +-
 hbase-archetypes/index.html                     |    6 +-
 hbase-archetypes/integration.html               |    6 +-
 hbase-archetypes/issue-tracking.html            |    6 +-
 hbase-archetypes/license.html                   |    6 +-
 hbase-archetypes/mail-lists.html                |    6 +-
 hbase-archetypes/plugin-management.html         |    6 +-
 hbase-archetypes/plugins.html                   |    6 +-
 hbase-archetypes/project-info.html              |    6 +-
 hbase-archetypes/project-summary.html           |    6 +-
 hbase-archetypes/source-repository.html         |    6 +-
 hbase-archetypes/team-list.html                 |    6 +-
 hbase-spark/checkstyle.html                     |    6 +-
 hbase-spark/dependencies.html                   |   24 +-
 hbase-spark/dependency-convergence.html         |    6 +-
 hbase-spark/dependency-info.html                |    6 +-
 hbase-spark/dependency-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                                      |    4 +-
 integration.html                                |    4 +-
 issue-tracking.html                             |    4 +-
 license.html                                    |    4 +-
 mail-lists.html                                 |    4 +-
 metrics.html                                    |    4 +-
 old_news.html                                   |    4 +-
 plugin-management.html                          |    4 +-
 plugins.html                                    |    4 +-
 poweredbyhbase.html                             |    4 +-
 project-info.html                               |    4 +-
 project-reports.html                            |    4 +-
 project-summary.html                            |    4 +-
 pseudo-distributed.html                         |    4 +-
 replication.html                                |    4 +-
 resources.html                                  |    4 +-
 source-repository.html                          |    4 +-
 sponsors.html                                   |    4 +-
 supportingprojects.html                         |    4 +-
 team-list.html                                  |    4 +-
 testdevapidocs/allclasses-frame.html            |    1 +
 testdevapidocs/allclasses-noframe.html          |    1 +
 testdevapidocs/index-all.html                   |   10 +
 .../hfile/TestCacheConfig.DataCacheEntry.html   |   26 +-
 .../io/hfile/TestCacheConfig.Deserializer.html  |   14 +-
 .../hfile/TestCacheConfig.IndexCacheEntry.html  |    8 +-
 .../hfile/TestCacheConfig.MetaCacheEntry.html   |    6 +-
 .../hadoop/hbase/io/hfile/TestCacheConfig.html  |   51 +-
 .../org/apache/hadoop/hbase/package-tree.html   |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html   |    4 +-
 .../hadoop/hbase/regionserver/package-tree.html |    4 +-
 .../apache/hadoop/hbase/test/package-tree.html  |    4 +-
 ...estByteBufferArray.DummyByteBufferArray.html |  316 +
 .../hadoop/hbase/util/TestByteBufferArray.html  |   49 +-
 .../hadoop/hbase/util/TestByteBufferUtils.html  |    4 +-
 ...estByteBufferArray.DummyByteBufferArray.html |  125 +
 .../apache/hadoop/hbase/util/package-frame.html |    1 +
 .../hadoop/hbase/util/package-summary.html      |  132 +-
 .../apache/hadoop/hbase/util/package-tree.html  |    5 +
 .../apache/hadoop/hbase/wal/package-tree.html   |    4 +-
 testdevapidocs/overview-tree.html               |    5 +
 .../hfile/TestCacheConfig.DataCacheEntry.html   |  814 +-
 .../io/hfile/TestCacheConfig.Deserializer.html  |  814 +-
 .../hfile/TestCacheConfig.IndexCacheEntry.html  |  814 +-
 .../hfile/TestCacheConfig.MetaCacheEntry.html   |  814 +-
 .../hadoop/hbase/io/hfile/TestCacheConfig.html  |  814 +-
 ...estByteBufferArray.DummyByteBufferArray.html |  193 +
 .../hadoop/hbase/util/TestByteBufferArray.html  |   41 +-
 203 files changed, 9525 insertions(+), 8630 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index eca5ec9..f68152e 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="20170719" />
+    <meta name="Date-Revision-yyyymmdd" content="20170720" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -606,7 +606,7 @@ under the License. -->
                         <a href="https://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2017-07-19</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2017-07-20</li>
             </p>
                 </div>
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.DumpOptions.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.DumpOptions.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.DumpOptions.html
index 9ec7269..8428049 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.DumpOptions.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.DumpOptions.html
@@ -331,118 +331,121 @@
 <span class="sourceLineNo">323</span>    // Loops each peer on each RS and dumps the queues<a name="line.323"></a>
 <span class="sourceLineNo">324</span>    try {<a name="line.324"></a>
 <span class="sourceLineNo">325</span>      List&lt;String&gt; regionservers = queuesClient.getListOfReplicators();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      for (String regionserver : regionservers) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        List&lt;String&gt; queueIds = queuesClient.getAllQueues(regionserver);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        replicationQueues.init(regionserver);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        if (!liveRegionServers.contains(regionserver)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          deadRegionServers.add(regionserver);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        for (String queueId : queueIds) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          List&lt;String&gt; wals = queuesClient.getLogsInQueue(regionserver, queueId);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            deletedQueues.add(regionserver + "/" + queueId);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, true,<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              hdfs));<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          } else {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, false,<a name="line.340"></a>
+<span class="sourceLineNo">326</span>      if (regionservers == null || regionservers.isEmpty()) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        return sb.toString();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      for (String regionserver : regionservers) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        List&lt;String&gt; queueIds = queuesClient.getAllQueues(regionserver);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        replicationQueues.init(regionserver);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        if (!liveRegionServers.contains(regionserver)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          deadRegionServers.add(regionserver);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        for (String queueId : queueIds) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          List&lt;String&gt; wals = queuesClient.getLogsInQueue(regionserver, queueId);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>            deletedQueues.add(regionserver + "/" + queueId);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, true,<a name="line.340"></a>
 <span class="sourceLineNo">341</span>              hdfs));<a name="line.341"></a>
-<span class="sourceLineNo">342</span>          }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    } catch (KeeperException ke) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throw new IOException(ke);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return sb.toString();<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>  private String formatQueue(String regionserver, ReplicationQueues replicationQueues, ReplicationQueueInfo queueInfo,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>                           String queueId, List&lt;String&gt; wals, boolean isDeleted, boolean hdfs) throws Exception {<a name="line.352"></a>
+<span class="sourceLineNo">342</span>          } else {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, false,<a name="line.343"></a>
+<span class="sourceLineNo">344</span>              hdfs));<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>    } catch (KeeperException ke) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw new IOException(ke);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return sb.toString();<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>    StringBuilder sb = new StringBuilder();<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    List&lt;String&gt; deadServers ;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    sb.append("Dumping replication queue info for RegionServer: [" + regionserver + "]" + "\n");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    sb.append("    Queue znode: " + queueId + "\n");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    sb.append("    PeerID: " + queueInfo.getPeerId() + "\n");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    sb.append("    Recovered: " + queueInfo.isQueueRecovered() + "\n");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    deadServers = queueInfo.getDeadRegionServers();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (deadServers.isEmpty()) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      sb.append("    No dead RegionServers found in this queue." + "\n");<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      sb.append("    Dead RegionServers: " + deadServers + "\n");<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    sb.append("    Was deleted: " + isDeleted + "\n");<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    sb.append("    Number of WALs in replication queue: " + wals.size() + "\n");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    peersQueueSize.addAndGet(queueInfo.getPeerId(), wals.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>    for (String wal : wals) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      long position = replicationQueues.getLogPosition(queueInfo.getPeerId(), wal);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      sb.append("    Replication position for " + wal + ": " + (position &gt; 0 ? position : "0"<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          + " (not started or nothing to replicate)") + "\n");<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    if (hdfs) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      FileSystem fs = FileSystem.get(getConf());<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      sb.append("    Total size of WALs on HDFS for this queue: "<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          + StringUtils.humanSize(getTotalWALSize(fs, wals, regionserver)) + "\n");<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    return sb.toString();<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>   *  return total size in bytes from a list of WALs<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private long getTotalWALSize(FileSystem fs, List&lt;String&gt; wals, String server) throws IOException {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    int size = 0;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    FileStatus fileStatus;<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>    for (String wal : wals) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      try {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        fileStatus = (new WALLink(getConf(), server, wal)).getFileStatus(fs);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } catch (IOException e) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (e instanceof FileNotFoundException) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          numWalsNotFound++;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          LOG.warn("WAL " + wal + " couldn't be found, skipping", e);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        } else {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          LOG.warn("Can't get file status of WAL " + wal + ", skipping", e);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        continue;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      size += fileStatus.getLen();<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>    totalSizeOfWALs += size;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    return size;<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 class WarnOnlyAbortable implements Abortable {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public void abort(String why, Throwable e) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      LOG.warn("DumpReplicationQueue received abort, ignoring.  Reason: " + why);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      if (LOG.isDebugEnabled()) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        LOG.debug(e);<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>    @Override<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    public boolean isAborted() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      return false;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<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>  private static class WarnOnlyStoppable implements Stoppable {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    public void stop(String why) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      LOG.warn("DumpReplicationQueue received stop, ignoring.  Reason: " + why);<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>    @Override<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public boolean isStopped() {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      return false;<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>}<a name="line.437"></a>
+<span class="sourceLineNo">354</span>  private String formatQueue(String regionserver, ReplicationQueues replicationQueues, ReplicationQueueInfo queueInfo,<a name="line.354"></a>
+<span class="sourceLineNo">355</span>                           String queueId, List&lt;String&gt; wals, boolean isDeleted, boolean hdfs) throws Exception {<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    StringBuilder sb = new StringBuilder();<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    List&lt;String&gt; deadServers ;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    sb.append("Dumping replication queue info for RegionServer: [" + regionserver + "]" + "\n");<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    sb.append("    Queue znode: " + queueId + "\n");<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    sb.append("    PeerID: " + queueInfo.getPeerId() + "\n");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    sb.append("    Recovered: " + queueInfo.isQueueRecovered() + "\n");<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    deadServers = queueInfo.getDeadRegionServers();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    if (deadServers.isEmpty()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      sb.append("    No dead RegionServers found in this queue." + "\n");<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      sb.append("    Dead RegionServers: " + deadServers + "\n");<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    sb.append("    Was deleted: " + isDeleted + "\n");<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    sb.append("    Number of WALs in replication queue: " + wals.size() + "\n");<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    peersQueueSize.addAndGet(queueInfo.getPeerId(), wals.size());<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>    for (String wal : wals) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      long position = replicationQueues.getLogPosition(queueInfo.getPeerId(), wal);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      sb.append("    Replication position for " + wal + ": " + (position &gt; 0 ? position : "0"<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          + " (not started or nothing to replicate)") + "\n");<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>    if (hdfs) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      FileSystem fs = FileSystem.get(getConf());<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      sb.append("    Total size of WALs on HDFS for this queue: "<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          + StringUtils.humanSize(getTotalWALSize(fs, wals, regionserver)) + "\n");<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    return sb.toString();<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>   *  return total size in bytes from a list of WALs<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  private long getTotalWALSize(FileSystem fs, List&lt;String&gt; wals, String server) throws IOException {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    int size = 0;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    FileStatus fileStatus;<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    for (String wal : wals) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      try {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        fileStatus = (new WALLink(getConf(), server, wal)).getFileStatus(fs);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      } catch (IOException e) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        if (e instanceof FileNotFoundException) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          numWalsNotFound++;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          LOG.warn("WAL " + wal + " couldn't be found, skipping", e);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        } else {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          LOG.warn("Can't get file status of WAL " + wal + ", skipping", e);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        continue;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      size += fileStatus.getLen();<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>    totalSizeOfWALs += size;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    return size;<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>  private static class WarnOnlyAbortable implements Abortable {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    public void abort(String why, Throwable e) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      LOG.warn("DumpReplicationQueue received abort, ignoring.  Reason: " + why);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      if (LOG.isDebugEnabled()) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        LOG.debug(e);<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>    @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    public boolean isAborted() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      return false;<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><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  private static class WarnOnlyStoppable implements Stoppable {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    public void stop(String why) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      LOG.warn("DumpReplicationQueue received stop, ignoring.  Reason: " + why);<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 boolean isStopped() {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return false;<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>}<a name="line.440"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
index 9ec7269..8428049 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
@@ -331,118 +331,121 @@
 <span class="sourceLineNo">323</span>    // Loops each peer on each RS and dumps the queues<a name="line.323"></a>
 <span class="sourceLineNo">324</span>    try {<a name="line.324"></a>
 <span class="sourceLineNo">325</span>      List&lt;String&gt; regionservers = queuesClient.getListOfReplicators();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      for (String regionserver : regionservers) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        List&lt;String&gt; queueIds = queuesClient.getAllQueues(regionserver);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        replicationQueues.init(regionserver);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        if (!liveRegionServers.contains(regionserver)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          deadRegionServers.add(regionserver);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        for (String queueId : queueIds) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          List&lt;String&gt; wals = queuesClient.getLogsInQueue(regionserver, queueId);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            deletedQueues.add(regionserver + "/" + queueId);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, true,<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              hdfs));<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          } else {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, false,<a name="line.340"></a>
+<span class="sourceLineNo">326</span>      if (regionservers == null || regionservers.isEmpty()) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        return sb.toString();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      for (String regionserver : regionservers) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        List&lt;String&gt; queueIds = queuesClient.getAllQueues(regionserver);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        replicationQueues.init(regionserver);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        if (!liveRegionServers.contains(regionserver)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          deadRegionServers.add(regionserver);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        for (String queueId : queueIds) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          List&lt;String&gt; wals = queuesClient.getLogsInQueue(regionserver, queueId);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>            deletedQueues.add(regionserver + "/" + queueId);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, true,<a name="line.340"></a>
 <span class="sourceLineNo">341</span>              hdfs));<a name="line.341"></a>
-<span class="sourceLineNo">342</span>          }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    } catch (KeeperException ke) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throw new IOException(ke);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return sb.toString();<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>  private String formatQueue(String regionserver, ReplicationQueues replicationQueues, ReplicationQueueInfo queueInfo,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>                           String queueId, List&lt;String&gt; wals, boolean isDeleted, boolean hdfs) throws Exception {<a name="line.352"></a>
+<span class="sourceLineNo">342</span>          } else {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, false,<a name="line.343"></a>
+<span class="sourceLineNo">344</span>              hdfs));<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>    } catch (KeeperException ke) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw new IOException(ke);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return sb.toString();<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>    StringBuilder sb = new StringBuilder();<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    List&lt;String&gt; deadServers ;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    sb.append("Dumping replication queue info for RegionServer: [" + regionserver + "]" + "\n");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    sb.append("    Queue znode: " + queueId + "\n");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    sb.append("    PeerID: " + queueInfo.getPeerId() + "\n");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    sb.append("    Recovered: " + queueInfo.isQueueRecovered() + "\n");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    deadServers = queueInfo.getDeadRegionServers();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (deadServers.isEmpty()) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      sb.append("    No dead RegionServers found in this queue." + "\n");<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      sb.append("    Dead RegionServers: " + deadServers + "\n");<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    sb.append("    Was deleted: " + isDeleted + "\n");<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    sb.append("    Number of WALs in replication queue: " + wals.size() + "\n");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    peersQueueSize.addAndGet(queueInfo.getPeerId(), wals.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>    for (String wal : wals) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      long position = replicationQueues.getLogPosition(queueInfo.getPeerId(), wal);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      sb.append("    Replication position for " + wal + ": " + (position &gt; 0 ? position : "0"<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          + " (not started or nothing to replicate)") + "\n");<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    if (hdfs) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      FileSystem fs = FileSystem.get(getConf());<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      sb.append("    Total size of WALs on HDFS for this queue: "<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          + StringUtils.humanSize(getTotalWALSize(fs, wals, regionserver)) + "\n");<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    return sb.toString();<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>   *  return total size in bytes from a list of WALs<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private long getTotalWALSize(FileSystem fs, List&lt;String&gt; wals, String server) throws IOException {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    int size = 0;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    FileStatus fileStatus;<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>    for (String wal : wals) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      try {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        fileStatus = (new WALLink(getConf(), server, wal)).getFileStatus(fs);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } catch (IOException e) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (e instanceof FileNotFoundException) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          numWalsNotFound++;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          LOG.warn("WAL " + wal + " couldn't be found, skipping", e);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        } else {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          LOG.warn("Can't get file status of WAL " + wal + ", skipping", e);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        continue;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      size += fileStatus.getLen();<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>    totalSizeOfWALs += size;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    return size;<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 class WarnOnlyAbortable implements Abortable {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public void abort(String why, Throwable e) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      LOG.warn("DumpReplicationQueue received abort, ignoring.  Reason: " + why);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      if (LOG.isDebugEnabled()) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        LOG.debug(e);<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>    @Override<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    public boolean isAborted() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      return false;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<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>  private static class WarnOnlyStoppable implements Stoppable {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    public void stop(String why) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      LOG.warn("DumpReplicationQueue received stop, ignoring.  Reason: " + why);<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>    @Override<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public boolean isStopped() {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      return false;<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>}<a name="line.437"></a>
+<span class="sourceLineNo">354</span>  private String formatQueue(String regionserver, ReplicationQueues replicationQueues, ReplicationQueueInfo queueInfo,<a name="line.354"></a>
+<span class="sourceLineNo">355</span>                           String queueId, List&lt;String&gt; wals, boolean isDeleted, boolean hdfs) throws Exception {<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    StringBuilder sb = new StringBuilder();<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    List&lt;String&gt; deadServers ;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    sb.append("Dumping replication queue info for RegionServer: [" + regionserver + "]" + "\n");<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    sb.append("    Queue znode: " + queueId + "\n");<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    sb.append("    PeerID: " + queueInfo.getPeerId() + "\n");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    sb.append("    Recovered: " + queueInfo.isQueueRecovered() + "\n");<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    deadServers = queueInfo.getDeadRegionServers();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    if (deadServers.isEmpty()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      sb.append("    No dead RegionServers found in this queue." + "\n");<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      sb.append("    Dead RegionServers: " + deadServers + "\n");<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    sb.append("    Was deleted: " + isDeleted + "\n");<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    sb.append("    Number of WALs in replication queue: " + wals.size() + "\n");<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    peersQueueSize.addAndGet(queueInfo.getPeerId(), wals.size());<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>    for (String wal : wals) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      long position = replicationQueues.getLogPosition(queueInfo.getPeerId(), wal);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      sb.append("    Replication position for " + wal + ": " + (position &gt; 0 ? position : "0"<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          + " (not started or nothing to replicate)") + "\n");<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>    if (hdfs) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      FileSystem fs = FileSystem.get(getConf());<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      sb.append("    Total size of WALs on HDFS for this queue: "<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          + StringUtils.humanSize(getTotalWALSize(fs, wals, regionserver)) + "\n");<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    return sb.toString();<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>   *  return total size in bytes from a list of WALs<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  private long getTotalWALSize(FileSystem fs, List&lt;String&gt; wals, String server) throws IOException {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    int size = 0;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    FileStatus fileStatus;<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    for (String wal : wals) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      try {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        fileStatus = (new WALLink(getConf(), server, wal)).getFileStatus(fs);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      } catch (IOException e) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        if (e instanceof FileNotFoundException) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          numWalsNotFound++;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          LOG.warn("WAL " + wal + " couldn't be found, skipping", e);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        } else {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          LOG.warn("Can't get file status of WAL " + wal + ", skipping", e);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        continue;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      size += fileStatus.getLen();<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>    totalSizeOfWALs += size;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    return size;<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>  private static class WarnOnlyAbortable implements Abortable {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    public void abort(String why, Throwable e) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      LOG.warn("DumpReplicationQueue received abort, ignoring.  Reason: " + why);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      if (LOG.isDebugEnabled()) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        LOG.debug(e);<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>    @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    public boolean isAborted() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      return false;<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><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  private static class WarnOnlyStoppable implements Stoppable {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    public void stop(String why) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      LOG.warn("DumpReplicationQueue received stop, ignoring.  Reason: " + why);<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 boolean isStopped() {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return false;<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>}<a name="line.440"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html
index 9ec7269..8428049 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html
@@ -331,118 +331,121 @@
 <span class="sourceLineNo">323</span>    // Loops each peer on each RS and dumps the queues<a name="line.323"></a>
 <span class="sourceLineNo">324</span>    try {<a name="line.324"></a>
 <span class="sourceLineNo">325</span>      List&lt;String&gt; regionservers = queuesClient.getListOfReplicators();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>      for (String regionserver : regionservers) {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        List&lt;String&gt; queueIds = queuesClient.getAllQueues(regionserver);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        replicationQueues.init(regionserver);<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        if (!liveRegionServers.contains(regionserver)) {<a name="line.329"></a>
-<span class="sourceLineNo">330</span>          deadRegionServers.add(regionserver);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        }<a name="line.331"></a>
-<span class="sourceLineNo">332</span>        for (String queueId : queueIds) {<a name="line.332"></a>
-<span class="sourceLineNo">333</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>          List&lt;String&gt; wals = queuesClient.getLogsInQueue(regionserver, queueId);<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.335"></a>
-<span class="sourceLineNo">336</span>            deletedQueues.add(regionserver + "/" + queueId);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, true,<a name="line.337"></a>
-<span class="sourceLineNo">338</span>              hdfs));<a name="line.338"></a>
-<span class="sourceLineNo">339</span>          } else {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, false,<a name="line.340"></a>
+<span class="sourceLineNo">326</span>      if (regionservers == null || regionservers.isEmpty()) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        return sb.toString();<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      for (String regionserver : regionservers) {<a name="line.329"></a>
+<span class="sourceLineNo">330</span>        List&lt;String&gt; queueIds = queuesClient.getAllQueues(regionserver);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        replicationQueues.init(regionserver);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>        if (!liveRegionServers.contains(regionserver)) {<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          deadRegionServers.add(regionserver);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        }<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        for (String queueId : queueIds) {<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.336"></a>
+<span class="sourceLineNo">337</span>          List&lt;String&gt; wals = queuesClient.getLogsInQueue(regionserver, queueId);<a name="line.337"></a>
+<span class="sourceLineNo">338</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.338"></a>
+<span class="sourceLineNo">339</span>            deletedQueues.add(regionserver + "/" + queueId);<a name="line.339"></a>
+<span class="sourceLineNo">340</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, true,<a name="line.340"></a>
 <span class="sourceLineNo">341</span>              hdfs));<a name="line.341"></a>
-<span class="sourceLineNo">342</span>          }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>        }<a name="line.343"></a>
-<span class="sourceLineNo">344</span>      }<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    } catch (KeeperException ke) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      throw new IOException(ke);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    return sb.toString();<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>  private String formatQueue(String regionserver, ReplicationQueues replicationQueues, ReplicationQueueInfo queueInfo,<a name="line.351"></a>
-<span class="sourceLineNo">352</span>                           String queueId, List&lt;String&gt; wals, boolean isDeleted, boolean hdfs) throws Exception {<a name="line.352"></a>
+<span class="sourceLineNo">342</span>          } else {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>            sb.append(formatQueue(regionserver, replicationQueues, queueInfo, queueId, wals, false,<a name="line.343"></a>
+<span class="sourceLineNo">344</span>              hdfs));<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>    } catch (KeeperException ke) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      throw new IOException(ke);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    return sb.toString();<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>    StringBuilder sb = new StringBuilder();<a name="line.354"></a>
-<span class="sourceLineNo">355</span><a name="line.355"></a>
-<span class="sourceLineNo">356</span>    List&lt;String&gt; deadServers ;<a name="line.356"></a>
-<span class="sourceLineNo">357</span><a name="line.357"></a>
-<span class="sourceLineNo">358</span>    sb.append("Dumping replication queue info for RegionServer: [" + regionserver + "]" + "\n");<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    sb.append("    Queue znode: " + queueId + "\n");<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    sb.append("    PeerID: " + queueInfo.getPeerId() + "\n");<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    sb.append("    Recovered: " + queueInfo.isQueueRecovered() + "\n");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    deadServers = queueInfo.getDeadRegionServers();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    if (deadServers.isEmpty()) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      sb.append("    No dead RegionServers found in this queue." + "\n");<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    } else {<a name="line.365"></a>
-<span class="sourceLineNo">366</span>      sb.append("    Dead RegionServers: " + deadServers + "\n");<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    sb.append("    Was deleted: " + isDeleted + "\n");<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    sb.append("    Number of WALs in replication queue: " + wals.size() + "\n");<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    peersQueueSize.addAndGet(queueInfo.getPeerId(), wals.size());<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>    for (String wal : wals) {<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      long position = replicationQueues.getLogPosition(queueInfo.getPeerId(), wal);<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      sb.append("    Replication position for " + wal + ": " + (position &gt; 0 ? position : "0"<a name="line.374"></a>
-<span class="sourceLineNo">375</span>          + " (not started or nothing to replicate)") + "\n");<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>    if (hdfs) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      FileSystem fs = FileSystem.get(getConf());<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      sb.append("    Total size of WALs on HDFS for this queue: "<a name="line.380"></a>
-<span class="sourceLineNo">381</span>          + StringUtils.humanSize(getTotalWALSize(fs, wals, regionserver)) + "\n");<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    }<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    return sb.toString();<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>   *  return total size in bytes from a list of WALs<a name="line.386"></a>
-<span class="sourceLineNo">387</span>   */<a name="line.387"></a>
-<span class="sourceLineNo">388</span>  private long getTotalWALSize(FileSystem fs, List&lt;String&gt; wals, String server) throws IOException {<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    int size = 0;<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    FileStatus fileStatus;<a name="line.390"></a>
-<span class="sourceLineNo">391</span><a name="line.391"></a>
-<span class="sourceLineNo">392</span>    for (String wal : wals) {<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      try {<a name="line.393"></a>
-<span class="sourceLineNo">394</span>        fileStatus = (new WALLink(getConf(), server, wal)).getFileStatus(fs);<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      } catch (IOException e) {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        if (e instanceof FileNotFoundException) {<a name="line.396"></a>
-<span class="sourceLineNo">397</span>          numWalsNotFound++;<a name="line.397"></a>
-<span class="sourceLineNo">398</span>          LOG.warn("WAL " + wal + " couldn't be found, skipping", e);<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        } else {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>          LOG.warn("Can't get file status of WAL " + wal + ", skipping", e);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        }<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        continue;<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      }<a name="line.403"></a>
-<span class="sourceLineNo">404</span>      size += fileStatus.getLen();<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>    totalSizeOfWALs += size;<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    return size;<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 class WarnOnlyAbortable implements Abortable {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    @Override<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public void abort(String why, Throwable e) {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      LOG.warn("DumpReplicationQueue received abort, ignoring.  Reason: " + why);<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      if (LOG.isDebugEnabled()) {<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        LOG.debug(e);<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>    @Override<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    public boolean isAborted() {<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      return false;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<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>  private static class WarnOnlyStoppable implements Stoppable {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    @Override<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    public void stop(String why) {<a name="line.428"></a>
-<span class="sourceLineNo">429</span>      LOG.warn("DumpReplicationQueue received stop, ignoring.  Reason: " + why);<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>    @Override<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    public boolean isStopped() {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      return false;<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>}<a name="line.437"></a>
+<span class="sourceLineNo">354</span>  private String formatQueue(String regionserver, ReplicationQueues replicationQueues, ReplicationQueueInfo queueInfo,<a name="line.354"></a>
+<span class="sourceLineNo">355</span>                           String queueId, List&lt;String&gt; wals, boolean isDeleted, boolean hdfs) throws Exception {<a name="line.355"></a>
+<span class="sourceLineNo">356</span><a name="line.356"></a>
+<span class="sourceLineNo">357</span>    StringBuilder sb = new StringBuilder();<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    List&lt;String&gt; deadServers ;<a name="line.359"></a>
+<span class="sourceLineNo">360</span><a name="line.360"></a>
+<span class="sourceLineNo">361</span>    sb.append("Dumping replication queue info for RegionServer: [" + regionserver + "]" + "\n");<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    sb.append("    Queue znode: " + queueId + "\n");<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    sb.append("    PeerID: " + queueInfo.getPeerId() + "\n");<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    sb.append("    Recovered: " + queueInfo.isQueueRecovered() + "\n");<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    deadServers = queueInfo.getDeadRegionServers();<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    if (deadServers.isEmpty()) {<a name="line.366"></a>
+<span class="sourceLineNo">367</span>      sb.append("    No dead RegionServers found in this queue." + "\n");<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    } else {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      sb.append("    Dead RegionServers: " + deadServers + "\n");<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    sb.append("    Was deleted: " + isDeleted + "\n");<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    sb.append("    Number of WALs in replication queue: " + wals.size() + "\n");<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    peersQueueSize.addAndGet(queueInfo.getPeerId(), wals.size());<a name="line.373"></a>
+<span class="sourceLineNo">374</span><a name="line.374"></a>
+<span class="sourceLineNo">375</span>    for (String wal : wals) {<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      long position = replicationQueues.getLogPosition(queueInfo.getPeerId(), wal);<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      sb.append("    Replication position for " + wal + ": " + (position &gt; 0 ? position : "0"<a name="line.377"></a>
+<span class="sourceLineNo">378</span>          + " (not started or nothing to replicate)") + "\n");<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>    if (hdfs) {<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      FileSystem fs = FileSystem.get(getConf());<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      sb.append("    Total size of WALs on HDFS for this queue: "<a name="line.383"></a>
+<span class="sourceLineNo">384</span>          + StringUtils.humanSize(getTotalWALSize(fs, wals, regionserver)) + "\n");<a name="line.384"></a>
+<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    return sb.toString();<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>   *  return total size in bytes from a list of WALs<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   */<a name="line.390"></a>
+<span class="sourceLineNo">391</span>  private long getTotalWALSize(FileSystem fs, List&lt;String&gt; wals, String server) throws IOException {<a name="line.391"></a>
+<span class="sourceLineNo">392</span>    int size = 0;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    FileStatus fileStatus;<a name="line.393"></a>
+<span class="sourceLineNo">394</span><a name="line.394"></a>
+<span class="sourceLineNo">395</span>    for (String wal : wals) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>      try {<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        fileStatus = (new WALLink(getConf(), server, wal)).getFileStatus(fs);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      } catch (IOException e) {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        if (e instanceof FileNotFoundException) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>          numWalsNotFound++;<a name="line.400"></a>
+<span class="sourceLineNo">401</span>          LOG.warn("WAL " + wal + " couldn't be found, skipping", e);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        } else {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>          LOG.warn("Can't get file status of WAL " + wal + ", skipping", e);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        }<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        continue;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      size += fileStatus.getLen();<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>    totalSizeOfWALs += size;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    return size;<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>  private static class WarnOnlyAbortable implements Abortable {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
+<span class="sourceLineNo">416</span>    public void abort(String why, Throwable e) {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      LOG.warn("DumpReplicationQueue received abort, ignoring.  Reason: " + why);<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      if (LOG.isDebugEnabled()) {<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        LOG.debug(e);<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>    @Override<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    public boolean isAborted() {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      return false;<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><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  private static class WarnOnlyStoppable implements Stoppable {<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    @Override<a name="line.430"></a>
+<span class="sourceLineNo">431</span>    public void stop(String why) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      LOG.warn("DumpReplicationQueue received stop, ignoring.  Reason: " + why);<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 boolean isStopped() {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      return false;<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>}<a name="line.440"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
index 7a442f0..103cd9e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
@@ -52,278 +52,285 @@
 <span class="sourceLineNo">044</span> * reading/writing data from this large buffer with a position and offset<a name="line.44"></a>
 <span class="sourceLineNo">045</span> */<a name="line.45"></a>
 <span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public final class ByteBufferArray {<a name="line.47"></a>
+<span class="sourceLineNo">047</span>public class ByteBufferArray {<a name="line.47"></a>
 <span class="sourceLineNo">048</span>  private static final Log LOG = LogFactory.getLog(ByteBufferArray.class);<a name="line.48"></a>
 <span class="sourceLineNo">049</span><a name="line.49"></a>
 <span class="sourceLineNo">050</span>  public static final int DEFAULT_BUFFER_SIZE = 4 * 1024 * 1024;<a name="line.50"></a>
 <span class="sourceLineNo">051</span>  @VisibleForTesting<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  ByteBuffer buffers[];<a name="line.52"></a>
 <span class="sourceLineNo">053</span>  private int bufferSize;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  private int bufferCount;<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>   * We allocate a number of byte buffers as the capacity. In order not to out<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   * of the array bounds for the last byte(see {@link ByteBufferArray#multiple}),<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * we will allocate one additional buffer with capacity 0;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * @param capacity total size of the byte buffer array<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * @param directByteBuffer true if we allocate direct buffer<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   * @param allocator the ByteBufferAllocator that will create the buffers<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * @throws IOException throws IOException if there is an exception thrown by the allocator<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  public ByteBufferArray(long capacity, boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      throws IOException {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    this.bufferSize = DEFAULT_BUFFER_SIZE;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    if (this.bufferSize &gt; (capacity / 16))<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      this.bufferSize = (int) roundUp(capacity / 16, 32768);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    this.bufferCount = (int) (roundUp(capacity, bufferSize) / bufferSize);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    LOG.info("Allocating buffers total=" + StringUtils.byteDesc(capacity)<a name="line.71"></a>
-<span class="sourceLineNo">072</span>        + ", sizePerBuffer=" + StringUtils.byteDesc(bufferSize) + ", count="<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        + bufferCount + ", direct=" + directByteBuffer);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    buffers = new ByteBuffer[bufferCount + 1];<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    createBuffers(directByteBuffer, allocator);<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>  private void createBuffers(boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      throws IOException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    int threadCount = Runtime.getRuntime().availableProcessors();<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    ExecutorService service = new ThreadPoolExecutor(threadCount, threadCount, 0L,<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        TimeUnit.MILLISECONDS, new LinkedBlockingQueue&lt;Runnable&gt;());<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    int perThreadCount = Math.round((float) (bufferCount) / threadCount);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    int lastThreadCount = bufferCount - (perThreadCount * (threadCount - 1));<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    Future&lt;ByteBuffer[]&gt;[] futures = new Future[threadCount];<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    try {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      for (int i = 0; i &lt; threadCount; i++) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        // Last thread will have to deal with a different number of buffers<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        int buffersToCreate = (i == threadCount - 1) ? lastThreadCount : perThreadCount;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        futures[i] = service.submit(<a name="line.90"></a>
-<span class="sourceLineNo">091</span>          new BufferCreatorCallable(bufferSize, directByteBuffer, buffersToCreate, allocator));<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      int bufferIndex = 0;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      for (Future&lt;ByteBuffer[]&gt; future : futures) {<a name="line.94"></a>
-<span class="sourceLineNo">095</span>        try {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>          ByteBuffer[] buffers = future.get();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>          for (ByteBuffer buffer : buffers) {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>            this.buffers[bufferIndex++] = buffer;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>          }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        } catch (InterruptedException | ExecutionException e) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>          LOG.error("Buffer creation interrupted", e);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>          throw new IOException(e);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        }<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    } finally {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      service.shutdownNow();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    // always create on heap empty dummy buffer at last<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    this.buffers[bufferCount] = ByteBuffer.allocate(0);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  }<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /**<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * A callable that creates buffers of the specified length either onheap/offheap using the<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * {@link ByteBufferAllocator}<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static class BufferCreatorCallable implements Callable&lt;ByteBuffer[]&gt; {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    private final int bufferCapacity;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    private final boolean directByteBuffer;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    private final int bufferCount;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    private final ByteBufferAllocator allocator;<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>    BufferCreatorCallable(int bufferCapacity, boolean directByteBuffer, int bufferCount,<a name="line.122"></a>
-<span class="sourceLineNo">123</span>        ByteBufferAllocator allocator) {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      this.bufferCapacity = bufferCapacity;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      this.directByteBuffer = directByteBuffer;<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      this.bufferCount = bufferCount;<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      this.allocator = allocator;<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 ByteBuffer[] call() throws Exception {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      ByteBuffer[] buffers = new ByteBuffer[this.bufferCount];<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      for (int i = 0; i &lt; this.bufferCount; i++) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        buffers[i] = allocator.allocate(this.bufferCapacity, this.directByteBuffer);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>      return buffers;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
-<span class="sourceLineNo">139</span><a name="line.139"></a>
-<span class="sourceLineNo">140</span>  private long roundUp(long n, long to) {<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    return ((n + to - 1) / to) * to;<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>  /**<a name="line.144"></a>
-<span class="sourceLineNo">145</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * @param start start position in the ByteBufferArray<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * @param dstArray The array into which bytes are to be written<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @return number of bytes read<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  public int getMultiple(long start, int len, byte[] dstArray) {<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    return getMultiple(start, len, dstArray, 0);<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>   * Transfers bytes from this buffer array into the given destination array<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * @param start start offset of this buffer array<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @param dstArray The array into which bytes are to be written<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @param dstOffset The offset within the given array of the first byte to be<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   *          written<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @return number of bytes read<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   */<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  public int getMultiple(long start, int len, byte[] dstArray, int dstOffset) {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    multiple(start, len, dstArray, dstOffset, GET_MULTIPLE_VISTOR);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    return len;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  }<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>  private final static Visitor GET_MULTIPLE_VISTOR = new Visitor() {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    @Override<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      ByteBufferUtils.copyFromBufferToArray(array, bb, pos, arrayIdx, len);<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">054</span>  @VisibleForTesting<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  int bufferCount;<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  /**<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * We allocate a number of byte buffers as the capacity. In order not to out<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * of the array bounds for the last byte(see {@link ByteBufferArray#multiple}),<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   * we will allocate one additional buffer with capacity 0;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * @param capacity total size of the byte buffer array<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   * @param directByteBuffer true if we allocate direct buffer<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * @param allocator the ByteBufferAllocator that will create the buffers<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   * @throws IOException throws IOException if there is an exception thrown by the allocator<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   */<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  public ByteBufferArray(long capacity, boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      throws IOException {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    this.bufferSize = DEFAULT_BUFFER_SIZE;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    if (this.bufferSize &gt; (capacity / 16))<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      this.bufferSize = (int) roundUp(capacity / 16, 32768);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.bufferCount = (int) (roundUp(capacity, bufferSize) / bufferSize);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    LOG.info("Allocating buffers total=" + StringUtils.byteDesc(capacity)<a name="line.72"></a>
+<span class="sourceLineNo">073</span>        + ", sizePerBuffer=" + StringUtils.byteDesc(bufferSize) + ", count="<a name="line.73"></a>
+<span class="sourceLineNo">074</span>        + bufferCount + ", direct=" + directByteBuffer);<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    buffers = new ByteBuffer[bufferCount + 1];<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    createBuffers(directByteBuffer, allocator);<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>  @VisibleForTesting<a name="line.79"></a>
+<span class="sourceLineNo">080</span>  void createBuffers(boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      throws IOException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    int threadCount = getThreadCount();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    ExecutorService service = new ThreadPoolExecutor(threadCount, threadCount, 0L,<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        TimeUnit.MILLISECONDS, new LinkedBlockingQueue&lt;Runnable&gt;());<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    int perThreadCount = (int)Math.floor((double) (bufferCount) / threadCount);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    int lastThreadCount = bufferCount - (perThreadCount * (threadCount - 1));<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    Future&lt;ByteBuffer[]&gt;[] futures = new Future[threadCount];<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    try {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      for (int i = 0; i &lt; threadCount; i++) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        // Last thread will have to deal with a different number of buffers<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        int buffersToCreate = (i == threadCount - 1) ? lastThreadCount : perThreadCount;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        futures[i] = service.submit(<a name="line.92"></a>
+<span class="sourceLineNo">093</span>          new BufferCreatorCallable(bufferSize, directByteBuffer, buffersToCreate, allocator));<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      int bufferIndex = 0;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>      for (Future&lt;ByteBuffer[]&gt; future : futures) {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>        try {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>          ByteBuffer[] buffers = future.get();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>          for (ByteBuffer buffer : buffers) {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>            this.buffers[bufferIndex++] = buffer;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>          }<a name="line.101"></a>
+<span class="sourceLineNo">102</span>        } catch (InterruptedException | ExecutionException e) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>          LOG.error("Buffer creation interrupted", e);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>          throw new IOException(e);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        }<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    } finally {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      service.shutdownNow();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    // always create on heap empty dummy buffer at last<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    this.buffers[bufferCount] = ByteBuffer.allocate(0);<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>  @VisibleForTesting<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  int getThreadCount() {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    return Runtime.getRuntime().availableProcessors();<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>  /**<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * A callable that creates buffers of the specified length either onheap/offheap using the<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * {@link ByteBufferAllocator}<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static class BufferCreatorCallable implements Callable&lt;ByteBuffer[]&gt; {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    private final int bufferCapacity;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    private final boolean directByteBuffer;<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    private final int bufferCount;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    private final ByteBufferAllocator allocator;<a name="line.127"></a>
+<span class="sourceLineNo">128</span><a name="line.128"></a>
+<span class="sourceLineNo">129</span>    BufferCreatorCallable(int bufferCapacity, boolean directByteBuffer, int bufferCount,<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        ByteBufferAllocator allocator) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      this.bufferCapacity = bufferCapacity;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      this.directByteBuffer = directByteBuffer;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      this.bufferCount = bufferCount;<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      this.allocator = allocator;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    }<a name="line.135"></a>
+<span class="sourceLineNo">136</span><a name="line.136"></a>
+<span class="sourceLineNo">137</span>    @Override<a name="line.137"></a>
+<span class="sourceLineNo">138</span>    public ByteBuffer[] call() throws Exception {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>      ByteBuffer[] buffers = new ByteBuffer[this.bufferCount];<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      for (int i = 0; i &lt; this.bufferCount; i++) {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        buffers[i] = allocator.allocate(this.bufferCapacity, this.directByteBuffer);<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      }<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      return buffers;<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>  private long roundUp(long n, long to) {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    return ((n + to - 1) / to) * to;<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>  /**<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   * @param start start position in the ByteBufferArray<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * @param dstArray The array into which bytes are to be written<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * @return number of bytes read<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  public int getMultiple(long start, int len, byte[] dstArray) {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    return getMultiple(start, len, dstArray, 0);<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>   * Transfers bytes from this buffer array into the given destination array<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param start start offset of this buffer array<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param dstArray The array into which bytes are to be written<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   * @param dstOffset The offset within the given array of the first byte to be<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   *          written<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   * @return number of bytes read<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
+<span class="sourceLineNo">171</span>  public int getMultiple(long start, int len, byte[] dstArray, int dstOffset) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    multiple(start, len, dstArray, dstOffset, GET_MULTIPLE_VISTOR);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    return len;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>  }<a name="line.174"></a>
 <span class="sourceLineNo">175</span><a name="line.175"></a>
-<span class="sourceLineNo">176</span>  /**<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * Transfers bytes from the given source array into this buffer array<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * @param start start offset of this buffer array<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @param srcArray The array from which bytes are to be read<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public void putMultiple(long start, int len, byte[] srcArray) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    putMultiple(start, len, srcArray, 0);<a name="line.183"></a>
-<span class="sourceLineNo">184</span>  }<a name="line.184"></a>
-<span class="sourceLineNo">185</span><a name="line.185"></a>
-<span class="sourceLineNo">186</span>  /**<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   * Transfers bytes from the given source array into this buffer array<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @param start start offset of this buffer array<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.189"></a>
-<span class="sourceLineNo">190</span>   * @param srcArray The array from which bytes are to be read<a name="line.190"></a>
-<span class="sourceLineNo">191</span>   * @param srcOffset The offset within the given array of the first byte to be<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   *          read<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   */<a name="line.193"></a>
-<span class="sourceLineNo">194</span>  public void putMultiple(long start, int len, byte[] srcArray, int srcOffset) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    multiple(start, len, srcArray, srcOffset, PUT_MULTIPLE_VISITOR);<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>  private final static Visitor PUT_MULTIPLE_VISITOR = new Visitor() {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>    @Override<a name="line.199"></a>
-<span class="sourceLineNo">200</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      ByteBufferUtils.copyFromArrayToBuffer(bb, pos, array, arrayIdx, len);<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  };<a name="line.203"></a>
+<span class="sourceLineNo">176</span>  private final static Visitor GET_MULTIPLE_VISTOR = new Visitor() {<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    @Override<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      ByteBufferUtils.copyFromBufferToArray(array, bb, pos, arrayIdx, len);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
+<span class="sourceLineNo">181</span>  };<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>  /**<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   * Transfers bytes from the given source array into this buffer array<a name="line.184"></a>
+<span class="sourceLineNo">185</span>   * @param start start offset of this buffer array<a name="line.185"></a>
+<span class="sourceLineNo">186</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * @param srcArray The array from which bytes are to be read<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  public void putMultiple(long start, int len, byte[] srcArray) {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    putMultiple(start, len, srcArray, 0);<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>  /**<a name="line.193"></a>
+<span class="sourceLineNo">194</span>   * Transfers bytes from the given source array into this buffer array<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * @param start start offset of this buffer array<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   * @param srcArray The array from which bytes are to be read<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * @param srcOffset The offset within the given array of the first byte to be<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   *          read<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public void putMultiple(long start, int len, byte[] srcArray, int srcOffset) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    multiple(start, len, srcArray, srcOffset, PUT_MULTIPLE_VISITOR);<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>  private interface Visitor {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    /**<a name="line.206"></a>
-<span class="sourceLineNo">207</span>     * Visit the given byte buffer, if it is a read action, we will transfer the<a name="line.207"></a>
-<span class="sourceLineNo">208</span>     * bytes from the buffer to the destination array, else if it is a write<a name="line.208"></a>
-<span class="sourceLineNo">209</span>     * action, we will transfer the bytes from the source array to the buffer<a name="line.209"></a>
-<span class="sourceLineNo">210</span>     * @param bb byte buffer<a name="line.210"></a>
-<span class="sourceLineNo">211</span>     * @param pos Start position in ByteBuffer<a name="line.211"></a>
-<span class="sourceLineNo">212</span>     * @param array a source or destination byte array<a name="line.212"></a>
-<span class="sourceLineNo">213</span>     * @param arrayOffset offset of the byte array<a name="line.213"></a>
-<span class="sourceLineNo">214</span>     * @param len read/write length<a name="line.214"></a>
-<span class="sourceLineNo">215</span>     */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    void visit(ByteBuffer bb, int pos, byte[] array, int arrayOffset, int len);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
-<span class="sourceLineNo">220</span>   * Access(read or write) this buffer array with a position and length as the<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * given array. Here we will only lock one buffer even if it may be need visit<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * several buffers. The consistency is guaranteed by the caller.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   * @param start start offset of this buffer array<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * @param len The maximum number of bytes to be accessed<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * @param array The array from/to which bytes are to be read/written<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   * @param arrayOffset The offset within the given array of the first byte to<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   *          be read or written<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @param visitor implement of how to visit the byte buffer<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  void multiple(long start, int len, byte[] array, int arrayOffset, Visitor visitor) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    assert len &gt;= 0;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>    long end = start + len;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    int startBuffer = (int) (start / bufferSize), startOffset = (int) (start % bufferSize);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    int endBuffer = (int) (end / bufferSize), endOffset = (int) (end % bufferSize);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    assert array.length &gt;= len + arrayOffset;<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        || (endBuffer == bufferCount &amp;&amp; endOffset == 0);<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      String msg = "Failed multiple, start=" + start + ",startBuffer="<a name="line.240"></a>
-<span class="sourceLineNo">241</span>          + startBuffer + ",bufferSize=" + bufferSize;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>      LOG.error(msg);<a name="line.242"></a>
-<span class="sourceLineNo">243</span>      throw new RuntimeException(msg);<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    }<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    int srcIndex = 0, cnt = -1;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    for (int i = startBuffer; i &lt;= endBuffer; ++i) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      int pos = 0;<a name="line.248"></a>
-<span class="sourceLineNo">249</span>      if (i == startBuffer) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>        cnt = bufferSize - startOffset;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        if (cnt &gt; len) cnt = len;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        pos = startOffset;<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      } else if (i == endBuffer) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        cnt = endOffset;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      } else {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        cnt = bufferSize;<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      visitor.visit(bb, pos, array, srcIndex + arrayOffset, cnt);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      srcIndex += cnt;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    assert srcIndex == len;<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>  /**<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   * Creates a ByteBuff from a given array of ByteBuffers from the given offset to the<a name="line.265"></a>
-<span class="sourceLineNo">266</span>   * length specified. For eg, if there are 4 buffers forming an array each with length 10 and<a name="line.266"></a>
-<span class="sourceLineNo">267</span>   * if we call asSubBuffer(5, 10) then we will create an MBB consisting of two BBs<a name="line.267"></a>
-<span class="sourceLineNo">268</span>   * and the first one be a BB from 'position' 5 to a 'length' 5 and the 2nd BB will be from<a name="line.268"></a>
-<span class="sourceLineNo">269</span>   * 'position' 0 to 'length' 5.<a name="line.269"></a>
-<span class="sourceLineNo">270</span>   * @param offset<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * @param len<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   * @return a ByteBuff formed from the underlying ByteBuffers<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public ByteBuff asSubByteBuff(long offset, int len) {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assert len &gt;= 0;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    long end = offset + len;<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    int startBuffer = (int) (offset / bufferSize), startBufferOffset = (int) (offset % bufferSize);<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    int endBuffer = (int) (end / bufferSize), endBufferOffset = (int) (end % bufferSize);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // Last buffer in the array is a dummy one with 0 capacity. Avoid sending back that<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    if (endBuffer == this.bufferCount) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      endBuffer--;<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      endBufferOffset = bufferSize;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    }<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        || (endBuffer == bufferCount &amp;&amp; endBufferOffset == 0);<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      String msg = "Failed subArray, start=" + offset + ",startBuffer=" + startBuffer<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          + ",bufferSize=" + bufferSize;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      LOG.error(msg);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      throw new RuntimeException(msg);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    }<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    int srcIndex = 0, cnt = -1;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    ByteBuffer[] mbb = new ByteBuffer[endBuffer - startBuffer + 1];<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    for (int i = startBuffer, j = 0; i &lt;= endBuffer; ++i, j++) {<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>      if (i == startBuffer) {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        cnt = bufferSize - startBufferOffset;<a name="line.298"></a>
-<span class="sourceLineNo">299</span>        if (cnt &gt; len) cnt = len;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        bb.limit(startBufferOffset + cnt).position(startBufferOffset);<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      } else if (i == endBuffer) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        cnt = endBufferOffset;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>        bb.position(0).limit(cnt);<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      } else {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        cnt = bufferSize;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        bb.position(0).limit(cnt);<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      mbb[j] = bb.slice();<a name="line.308"></a>
-<span class="sourceLineNo">309</span>      srcIndex += cnt;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    }<a name="line.310"></a>
-<span class="sourceLineNo">311</span>    assert srcIndex == len;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    if (mbb.length &gt; 1) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      return new MultiByteBuff(mbb);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    } else {<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      return new SingleByteBuff(mbb[0]);<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    }<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>}<a name="line.318"></a>
+<span class="sourceLineNo">205</span>  private final static Visitor PUT_MULTIPLE_VISITOR = new Visitor() {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    @Override<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    public void visit(ByteBuffer bb, int pos, byte[] array, int arrayIdx, int len) {<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      ByteBufferUtils.copyFromArrayToBuffer(bb, pos, array, arrayIdx, len);<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  };<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>  private interface Visitor {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    /**<a name="line.213"></a>
+<span class="sourceLineNo">214</span>     * Visit the given byte buffer, if it is a read action, we will transfer the<a name="line.214"></a>
+<span class="sourceLineNo">215</span>     * bytes from the buffer to the destination array, else if it is a write<a name="line.215"></a>
+<span class="sourceLineNo">216</span>     * action, we will transfer the bytes from the source array to the buffer<a name="line.216"></a>
+<span class="sourceLineNo">217</span>     * @param bb byte buffer<a name="line.217"></a>
+<span class="sourceLineNo">218</span>     * @param pos Start position in ByteBuffer<a name="line.218"></a>
+<span class="sourceLineNo">219</span>     * @param array a source or destination byte array<a name="line.219"></a>
+<span class="sourceLineNo">220</span>     * @param arrayOffset offset of the byte array<a name="line.220"></a>
+<span class="sourceLineNo">221</span>     * @param len read/write length<a name="line.221"></a>
+<span class="sourceLineNo">222</span>     */<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    void visit(ByteBuffer bb, int pos, byte[] array, int arrayOffset, int len);<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>  /**<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * Access(read or write) this buffer array with a position and length as the<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * given array. Here we will only lock one buffer even if it may be need visit<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   * several buffers. The consistency is guaranteed by the caller.<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   * @param start start offset of this buffer array<a name="line.230"></a>
+<span class="sourceLineNo">231</span>   * @param len The maximum number of bytes to be accessed<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * @param array The array from/to which bytes are to be read/written<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * @param arrayOffset The offset within the given array of the first byte to<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   *          be read or written<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * @param visitor implement of how to visit the byte buffer<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  void multiple(long start, int len, byte[] array, int arrayOffset, Visitor visitor) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>    assert len &gt;= 0;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    long end = start + len;<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    int startBuffer = (int) (start / bufferSize), startOffset = (int) (start % bufferSize);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    int endBuffer = (int) (end / bufferSize), endOffset = (int) (end % bufferSize);<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assert array.length &gt;= len + arrayOffset;<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        || (endBuffer == bufferCount &amp;&amp; endOffset == 0);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      String msg = "Failed multiple, start=" + start + ",startBuffer="<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          + startBuffer + ",bufferSize=" + bufferSize;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      LOG.error(msg);<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      throw new RuntimeException(msg);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    int srcIndex = 0, cnt = -1;<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    for (int i = startBuffer; i &lt;= endBuffer; ++i) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      int pos = 0;<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      if (i == startBuffer) {<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        cnt = bufferSize - startOffset;<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        if (cnt &gt; len) cnt = len;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        pos = startOffset;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      } else if (i == endBuffer) {<a name="line.260"></a>
+<span class="sourceLineNo">261</span>        cnt = endOffset;<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      } else {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        cnt = bufferSize;<a name="line.263"></a>
+<span class="sourceLineNo">264</span>      }<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      visitor.visit(bb, pos, array, srcIndex + arrayOffset, cnt);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      srcIndex += cnt;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    assert srcIndex == len;<a name="line.268"></a>
+<span class="sourceLineNo">269</span>  }<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>  /**<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * Creates a ByteBuff from a given array of ByteBuffers from the given offset to the<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   * length specified. For eg, if there are 4 buffers forming an array each with length 10 and<a name="line.273"></a>
+<span class="sourceLineNo">274</span>   * if we call asSubBuffer(5, 10) then we will create an MBB consisting of two BBs<a name="line.274"></a>
+<span class="sourceLineNo">275</span>   * and the first one be a BB from 'position' 5 to a 'length' 5 and the 2nd BB will be from<a name="line.275"></a>
+<span class="sourceLineNo">276</span>   * 'position' 0 to 'length' 5.<a name="line.276"></a>
+<span class="sourceLineNo">277</span>   * @param offset<a name="line.277"></a>
+<span class="sourceLineNo">278</span>   * @param len<a name="line.278"></a>
+<span class="sourceLineNo">279</span>   * @return a ByteBuff formed from the underlying ByteBuffers<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   */<a name="line.280"></a>
+<span class="sourceLineNo">281</span>  public ByteBuff asSubByteBuff(long offset, int len) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    assert len &gt;= 0;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    long end = offset + len;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    int startBuffer = (int) (offset / bufferSize), startBufferOffset = (int) (offset % bufferSize);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    int endBuffer = (int) (end / bufferSize), endBufferOffset = (int) (end % bufferSize);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    // Last buffer in the array is a dummy one with 0 capacity. Avoid sending back that<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    if (endBuffer == this.bufferCount) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      endBuffer--;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      endBufferOffset = bufferSize;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    }<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.292"></a>
+<span class="sourceLineNo">293</span>        || (endBuffer == bufferCount &amp;&amp; endBufferOffset == 0);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    if (startBuffer &gt;= buffers.length || startBuffer &lt; 0) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      String msg = "Failed subArray, start=" + offset + ",startBuffer=" + startBuffer<a name="line.295"></a>
+<span class="sourceLineNo">296</span>          + ",bufferSize=" + bufferSize;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>      LOG.error(msg);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>      throw new RuntimeException(msg);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    int srcIndex = 0, cnt = -1;<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    ByteBuffer[] mbb = new ByteBuffer[endBuffer - startBuffer + 1];<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    for (int i = startBuffer, j = 0; i &lt;= endBuffer; ++i, j++) {<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      ByteBuffer bb = buffers[i].duplicate();<a name="line.303"></a>
+<span class="sourceLineNo">304</span>      if (i == startBuffer) {<a name="line.304"></a>
+<span class="sourceLineNo">305</span>        cnt = bufferSize - startBufferOffset;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>        if (cnt &gt; len) cnt = len;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        bb.limit(startBufferOffset + cnt).position(startBufferOffset);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      } else if (i == endBuffer) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        cnt = endBufferOffset;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        bb.position(0).limit(cnt);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      } else {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        cnt = bufferSize;<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        bb.position(0).limit(cnt);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      }<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      mbb[j] = bb.slice();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      srcIndex += cnt;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>    assert srcIndex == len;<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    if (mbb.length &gt; 1) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>      return new MultiByteBuff(mbb);<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    } else {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>      return new SingleByteBuff(mbb[0]);<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    }<a name="line.323"></a>
+<span class="sourceLineNo">324</span>  }<a name="line.324"></a>
+<span class="sourceLineNo">325</span>}<a name="line.325"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
index c6abfe5..3734517 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.MetaCacheEntry.html
@@ -29,406 +29,420 @@
 <span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertFalse;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.junit.Assert.assertTrue;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.lang.management.ManagementFactory;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.lang.management.MemoryUsage;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.nio.ByteBuffer;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.Path;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HConstants;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.junit.After;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.Before;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.Test;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.experimental.categories.Category;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * Tests that {@link CacheConfig} does as expected.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>// This test is marked as a large test though it runs in a short amount of time<a name="line.56"></a>
-<span class="sourceLineNo">057</span>// (seconds).  It is large because it depends on being able to reset the global<a name="line.57"></a>
-<span class="sourceLineNo">058</span>// blockcache instance which is in a global variable.  Experience has it that<a name="line.58"></a>
-<span class="sourceLineNo">059</span>// tests clash on the global variable if this test is run as small sized test.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>@Category({IOTests.class, LargeTests.class})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class TestCacheConfig {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final Log LOG = LogFactory.getLog(TestCacheConfig.class);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private Configuration conf;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  static class Deserializer implements CacheableDeserializer&lt;Cacheable&gt; {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    private final Cacheable cacheable;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    private int deserializedIdentifier = 0;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>    Deserializer(final Cacheable c) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      deserializedIdentifier = CacheableDeserializerIdManager.registerDeserializer(this);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      this.cacheable = c;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>    @Override<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    public int getDeserialiserIdentifier() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return deserializedIdentifier;<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>    @Override<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    public Cacheable deserialize(ByteBuff b, boolean reuse, MemoryType memType) throws IOException {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      LOG.info("Deserialized " + b + ", reuse=" + reuse);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      return cacheable;<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 Cacheable deserialize(ByteBuff b) throws IOException {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      LOG.info("Deserialized " + b);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      return cacheable;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  };<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  static class IndexCacheEntry extends DataCacheEntry {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    private static IndexCacheEntry SINGLETON = new IndexCacheEntry();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    public IndexCacheEntry() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      super(SINGLETON);<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 BlockType getBlockType() {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      return BlockType.ROOT_INDEX;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  static class DataCacheEntry implements Cacheable {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    private static final int SIZE = 1;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    private static DataCacheEntry SINGLETON = new DataCacheEntry();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    final CacheableDeserializer&lt;Cacheable&gt; deserializer;<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>    DataCacheEntry() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      this(SINGLETON);<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>    DataCacheEntry(final Cacheable c) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      this.deserializer = new Deserializer(c);<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 String toString() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return "size=" + SIZE + ", type=" + getBlockType();<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 heapSize() {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return SIZE;<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 int getSerializedLength() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      return SIZE;<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 void serialize(ByteBuffer destination) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.info("Serialized " + this + " to " + destination);<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 CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      return this.deserializer;<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 BlockType getBlockType() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return BlockType.DATA;<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 MemoryType getMemoryType() {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return MemoryType.EXCLUSIVE;<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>  static class MetaCacheEntry extends DataCacheEntry {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public BlockType getBlockType() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return BlockType.INTERMEDIATE_INDEX;<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><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Before<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void setUp() throws Exception {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    CacheConfig.clearGlobalInstances();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.conf = HBaseConfiguration.create();<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>  @After<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public void tearDown() throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    // Let go of current block cache.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    CacheConfig.clearGlobalInstances();<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 name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param cc<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param doubling If true, addition of element ups counter by 2, not 1, because element added<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * to onheap and offheap caches.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param sizing True if we should run sizing test (doesn't always apply).<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  void basicBlockCacheOps(final CacheConfig cc, final boolean doubling,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean sizing) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    BlockCache bc = cc.getBlockCache();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    BlockCacheKey bck = new BlockCacheKey("f", 0);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    Cacheable c = new DataCacheEntry();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // Do asserts on block counting.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    long initialBlockCount = bc.getBlockCount();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    assertEquals(doubling? 2: 1, bc.getBlockCount() - initialBlockCount);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    bc.evictBlock(bck);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertEquals(initialBlockCount, bc.getBlockCount());<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // Do size accounting.  Do it after the above 'warm-up' because it looks like some<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    // buffers do lazy allocation so sizes are off on first go around.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (sizing) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      long originalSize = bc.getCurrentSize();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      assertTrue(bc.getCurrentSize() &gt; originalSize);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      bc.evictBlock(bck);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      long size = bc.getCurrentSize();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      assertEquals(originalSize, size);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param cc<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param filename<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  private long cacheDataBlock(final CacheConfig cc, final String filename) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    BlockCacheKey bck = new BlockCacheKey(filename, 0);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    Cacheable c = new DataCacheEntry();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // Do asserts on block counting.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    cc.getBlockCache().cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return cc.getBlockCache().getBlockCount();<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>  @Test<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public void testDisableCacheDataBlock() throws IOException {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    Configuration conf = HBaseConfiguration.create();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    CacheConfig cacheConfig = new CacheConfig(conf);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    assertFalse(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    assertFalse(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, true);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    conf.setBoolean(CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY, true);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    conf.setBoolean(CacheConfig.CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    conf.setBoolean(CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY, true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>    cacheConfig = new CacheConfig(conf);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    assertTrue(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertTrue(cacheConfig.shouldCacheDataCompressed());<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    assertTrue(cacheConfig.shouldCacheDataOnWrite());<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, false);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    cacheConfig = new CacheConfig(conf);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, true);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    HColumnDescriptor family = new HColumnDescriptor("testDisableCacheDataBlock");<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    family.setBlockCacheEnabled(false);<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    cacheConfig = new CacheConfig(conf, family);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  @Test<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public void testCacheConfigDefaultLRUBlockCache() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    basicBlockCacheOps(cc, false, true);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<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>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  @Test<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public void testOffHeapBucketCacheConfig() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  public void testOnHeapBucketCacheConfig() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "heap");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  public void testFileBucketCacheConfig() throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    HBaseTestingUtility htu = new HBaseTestingUtility(this.conf);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    try {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      Path p = new Path(htu.getDataTestDir(), "bc.txt");<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      FileSystem fs = FileSystem.get(this.conf);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      fs.create(p).close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "file:" + p);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      doBucketCacheConfigTest();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    } finally {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      htu.cleanupTestDir();<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>  private void doBucketCacheConfigTest() {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final int bcSize = 100;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    basicBlockCacheOps(cc, false, false);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    BlockCache [] bcs = cbc.getBlockCaches();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    assertTrue(bcs[0] instanceof LruBlockCache);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LruBlockCache lbc = (LruBlockCache)bcs[0];<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    assertEquals(MemorySizeUtil.getLruCacheSize(this.conf), lbc.getMaxSize());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    assertTrue(bcs[1] instanceof BucketCache);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    BucketCache bc = (BucketCache)bcs[1];<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    assertEquals(bcSize, bc.getMaxSize() / (1024 * 1024));<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>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * LruBlockCache as L1 with a BucketCache for L2.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  @Test (timeout=10000)<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  public void testBucketCacheConfigL1L2Setup() {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Make lru size is smaller than bcSize for sure.  Need this to be true so when eviction<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    // from L1 happens, it does not fail because L2 can't take the eviction because block too big.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    this.conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.001f);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    long lruExpectedSize = MemorySizeUtil.getLruCacheSize(this.conf);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    final int bcSize = 100;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    long bcExpectedSize = 100 * 1024 * 1024; // MB.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    assertTrue(lruExpectedSize &lt; bcExpectedSize);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    this.conf.setBoolean(CacheConfig.BUCKET_CACHE_COMBINED_KEY, false);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    basicBlockCacheOps(cc, false, false);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    LruBlockCache lbc = (LruBlockCache)cc.getBlockCache();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    assertEquals(lruExpectedSize, lbc.getMaxSize());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    BlockCache bc = lbc.getVictimHandler();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    assertEquals(bcExpectedSize, ((BucketCache) bc).getMaxSize());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // Test the L1+L2 deploy works as we'd expect with blocks evicted from L1 going to L2.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    long initialL1BlockCount = lbc.getBlockCount();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    long initialL2BlockCount = bc.getBlockCount();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    Cacheable c = new DataCacheEntry();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    BlockCacheKey bck = new BlockCacheKey("bck", 0);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    lbc.cacheBlock(bck, c, false, false);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    assertEquals(initialL1BlockCount + 1, lbc.getBlockCount());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    assertEquals(initialL2BlockCount, bc.getBlockCount());<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // Force evictions by putting in a block too big.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    final long justTooBigSize = lbc.acceptableSize() + 1;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    lbc.cacheBlock(new BlockCacheKey("bck2", 0), new DataCacheEntry() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      @Override<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      public long heapSize() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        return justTooBigSize;<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 int getSerializedLength() {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        return (int)heapSize();<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>    // The eviction thread in lrublockcache needs to run.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    while (initialL1BlockCount != lbc.getBlockCount()) Threads.sleep(10);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    assertEquals(initialL1BlockCount, lbc.getBlockCount());<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    long count = bc.getBlockCount();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    assertTrue(initialL2BlockCount + 1 &lt;= count);<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>   * Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * LruBlockCache when using CombinedBlockCcahe.<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Test<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public void testCacheDataInL1() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, 100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    // Add a data block.  Should go into L2, into the Bucket Cache, not the LruBlockCache.<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    cacheDataBlock(cc, "1");<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    LruBlockCache lrubc = (LruBlockCache)cbc.getBlockCaches()[0];<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    assertDataBlockCount(lrubc, 0);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // Enable our test flag.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    cc.setCacheDataInL1(true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    cacheDataBlock(cc, "2");<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    assertDataBlockCount(lrubc, 1);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    cc.setCacheDataInL1(false);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    cacheDataBlock(cc, "3");<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    assertDataBlockCount(lrubc, 1);<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>  private void assertDataBlockCount(final LruBlockCache bc, final int expected) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Map&lt;BlockType, Integer&gt; blocks = bc.getBlockTypeCountsForTest();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    assertEquals(expected, blocks == null? 0:<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      blocks.get(BlockType.DATA) == null? 0:<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      blocks.get(BlockType.DATA).intValue());<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>}<a name="line.423"></a>
+<span class="sourceLineNo">024</span>import static org.junit.Assert.fail;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.lang.management.ManagementFactory;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.lang.management.MemoryUsage;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.nio.ByteBuffer;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FileSystem;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.fs.Path;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.After;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.Before;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>/**<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * Tests that {@link CacheConfig} does as expected.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>// This test is marked as a large test though it runs in a short amount of time<a name="line.57"></a>
+<span class="sourceLineNo">058</span>// (seconds).  It is large because it depends on being able to reset the global<a name="line.58"></a>
+<span class="sourceLineNo">059</span>// blockcache instance which is in a global variable.  Experience has it that<a name="line.59"></a>
+<span class="sourceLineNo">060</span>// tests clash on the global variable if this test is run as small sized test.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>@Category({IOTests.class, LargeTests.class})<a name="line.61"></a>
+<span class="sourceLineNo">062</span>public class TestCacheConfig {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final Log LOG = LogFactory.getLog(TestCacheConfig.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private Configuration conf;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  static class Deserializer implements CacheableDeserializer&lt;Cacheable&gt; {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    private final Cacheable cacheable;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    private int deserializedIdentifier = 0;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>    Deserializer(final Cacheable c) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      deserializedIdentifier = CacheableDeserializerIdManager.registerDeserializer(this);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      this.cacheable = c;<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>    @Override<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    public int getDeserialiserIdentifier() {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      return deserializedIdentifier;<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 Cacheable deserialize(ByteBuff b, boolean reuse, MemoryType memType) throws IOException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      LOG.info("Deserialized " + b + ", reuse=" + reuse);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      return cacheable;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    @Override<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    public Cacheable deserialize(ByteBuff b) throws IOException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      LOG.info("Deserialized " + b);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      return cacheable;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  };<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  static class IndexCacheEntry extends DataCacheEntry {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    private static IndexCacheEntry SINGLETON = new IndexCacheEntry();<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    public IndexCacheEntry() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      super(SINGLETON);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    @Override<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public BlockType getBlockType() {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      return BlockType.ROOT_INDEX;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  static class DataCacheEntry implements Cacheable {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    private static final int SIZE = 1;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    private static DataCacheEntry SINGLETON = new DataCacheEntry();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    final CacheableDeserializer&lt;Cacheable&gt; deserializer;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>    DataCacheEntry() {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      this(SINGLETON);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>    DataCacheEntry(final Cacheable c) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      this.deserializer = new Deserializer(c);<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 String toString() {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      return "size=" + SIZE + ", type=" + getBlockType();<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 heapSize() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      return SIZE;<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 int getSerializedLength() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return SIZE;<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 void serialize(ByteBuffer destination) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.info("Serialized " + this + " to " + destination);<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 CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      return this.deserializer;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    public BlockType getBlockType() {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      return BlockType.DATA;<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 MemoryType getMemoryType() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return MemoryType.EXCLUSIVE;<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>  static class MetaCacheEntry extends DataCacheEntry {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public BlockType getBlockType() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return BlockType.INTERMEDIATE_INDEX;<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><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Before<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void setUp() throws Exception {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    CacheConfig.clearGlobalInstances();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.conf = HBaseConfiguration.create();<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>  @After<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public void tearDown() throws Exception {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // Let go of current block cache.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    CacheConfig.clearGlobalInstances();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @param cc<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * @param doubling If true, addition of element ups counter by 2, not 1, because element added<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * to onheap and offheap caches.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @param sizing True if we should run sizing test (doesn't always apply).<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  void basicBlockCacheOps(final CacheConfig cc, final boolean doubling,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean sizing) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    BlockCache bc = cc.getBlockCache();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    BlockCacheKey bck = new BlockCacheKey("f", 0);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    Cacheable c = new DataCacheEntry();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // Do asserts on block counting.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    long initialBlockCount = bc.getBlockCount();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    assertEquals(doubling? 2: 1, bc.getBlockCount() - initialBlockCount);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    bc.evictBlock(bck);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertEquals(initialBlockCount, bc.getBlockCount());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // Do size accounting.  Do it after the above 'warm-up' because it looks like some<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // buffers do lazy allocation so sizes are off on first go around.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (sizing) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      long originalSize = bc.getCurrentSize();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      assertTrue(bc.getCurrentSize() &gt; originalSize);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      bc.evictBlock(bck);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      long size = bc.getCurrentSize();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      assertEquals(originalSize, size);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  /**<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param cc<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param filename<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * @return<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  private long cacheDataBlock(final CacheConfig cc, final String filename) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    BlockCacheKey bck = new BlockCacheKey(filename, 0);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    Cacheable c = new DataCacheEntry();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // Do asserts on block counting.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    cc.getBlockCache().cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    return cc.getBlockCache().getBlockCount();<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>  @Test<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public void testDisableCacheDataBlock() throws IOException {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    Configuration conf = HBaseConfiguration.create();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    CacheConfig cacheConfig = new CacheConfig(conf);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    assertFalse(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertFalse(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, true);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    conf.setBoolean(CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY, true);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    conf.setBoolean(CacheConfig.CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, true);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    conf.setBoolean(CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY, true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    cacheConfig = new CacheConfig(conf);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    assertTrue(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertTrue(cacheConfig.shouldCacheDataCompressed());<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assertTrue(cacheConfig.shouldCacheDataOnWrite());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, false);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>    cacheConfig = new CacheConfig(conf);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, true);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    HColumnDescriptor family = new HColumnDescriptor("testDisableCacheDataBlock");<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    family.setBlockCacheEnabled(false);<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    cacheConfig = new CacheConfig(conf, family);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<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>  @Test<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public void testCacheConfigDefaultLRUBlockCache() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    basicBlockCacheOps(cc, false, true);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<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>  /**<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @Test<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public void testOffHeapBucketCacheConfig() {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public void testOnHeapBucketCacheConfig() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "heap");<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public void testFileBucketCacheConfig() throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    HBaseTestingUtility htu = new HBaseTestingUtility(this.conf);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      Path p = new Path(htu.getDataTestDir(), "bc.txt");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      FileSystem fs = FileSystem.get(this.conf);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      fs.create(p).close();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "file:" + p);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      doBucketCacheConfigTest();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } finally {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      htu.cleanupTestDir();<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>  private void doBucketCacheConfigTest() {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    final int bcSize = 100;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    basicBlockCacheOps(cc, false, false);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    BlockCache [] bcs = cbc.getBlockCaches();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    assertTrue(bcs[0] instanceof LruBlockCache);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LruBlockCache lbc = (LruBlockCache)bcs[0];<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    assertEquals(MemorySizeUtil.getLruCacheSize(this.conf), lbc.getMaxSize());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    assertTrue(bcs[1] instanceof BucketCache);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    BucketCache bc = (BucketCache)bcs[1];<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    assertEquals(bcSize, bc.getMaxSize() / (1024 * 1024));<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * LruBlockCache as L1 with a BucketCache for L2.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  @Test (timeout=10000)<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public void testBucketCacheConfigL1L2Setup() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Make lru size is smaller than bcSize for sure.  Need this to be true so when eviction<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    // from L1 happens, it does not fail because L2 can't take the eviction because block too big.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    this.conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.001f);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    long lruExpectedSize = MemorySizeUtil.getLruCacheSize(this.conf);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    final int bcSize = 100;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    long bcExpectedSize = 100 * 1024 * 1024; // MB.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    assertTrue(lruExpectedSize &lt; bcExpectedSize);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    this.conf.setBoolean(CacheConfig.BUCKET_CACHE_COMBINED_KEY, false);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    basicBlockCacheOps(cc, false, false);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    LruBlockCache lbc = (LruBlockCache)cc.getBlockCache();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    assertEquals(lruExpectedSize, lbc.getMaxSize());<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    BlockCache bc = lbc.getVictimHandler();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    assertEquals(bcExpectedSize, ((BucketCache) bc).getMaxSize());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    // Test the L1+L2 deploy works as we'd expect with blocks evicted from L1 going to L2.<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    long initialL1BlockCount = lbc.getBlockCount();<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    long initialL2BlockCount = bc.getBlockCount();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    Cacheable c = new DataCacheEntry();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    BlockCacheKey bck = new BlockCacheKey("bck", 0);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    lbc.cacheBlock(bck, c, false, false);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    assertEquals(initialL1BlockCount + 1, lbc.getBlockCount());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertEquals(initialL2BlockCount, bc.getBlockCount());<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // Force evictions by putting in a block too big.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    final long justTooBigSize = lbc.acceptableSize() + 1;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    lbc.cacheBlock(new BlockCacheKey("bck2", 0), new DataCacheEntry() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      @Override<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      public long heapSize() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        return justTooBigSize;<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 int getSerializedLength() {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        return (int)heapSize();<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>    // The eviction thread in lrublockcache needs to run.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    while (initialL1BlockCount != lbc.getBlockCount()) Threads.sleep(10);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    assertEquals(initialL1BlockCount, lbc.getBlockCount());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    long count = bc.getBlockCount();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    assertTrue(initialL2BlockCount + 1 &lt;= count);<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * LruBlockCache when using CombinedBlockCcahe.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Test<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public void testCacheDataInL1() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, 100);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    // Add a data block.  Should go into L2, into the Bucket Cache, not the LruBlockCache.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    cacheDataBlock(cc, "1");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    LruBlockCache lrubc = (LruBlockCache)cbc.getBlockCaches()[0];<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    assertDataBlockCount(lrubc, 0);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // Enable our test flag.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    cc.setCacheDataInL1(true);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    cacheDataBlock(cc, "2");<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    assertDataBlockCount(lrubc, 1);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    cc.setCacheDataInL1(false);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    cacheDataBlock(cc, "3");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    assertDataBlockCount(lrubc, 1);<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>  @Test<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  public void testL2CacheWithInvalidBucketSize() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    Configuration c = new Configuration(this.conf);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    c.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    c.set(CacheConfig.BUCKET_CACHE_BUCKETS_KEY, "256,512,1024,2048,4000,4096");<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    c.setFloat(HConstants.BUCKET_CACHE_SIZE_KEY, 1024);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    try {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      CacheConfig.getL2(c);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      fail("Should throw IllegalArgumentException when passing illegal value for bucket size");<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    } catch (IllegalArgumentException e) {<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><a name="line.430"></a>
+<span class="sourceLineNo">431</span>  private void assertDataBlockCount(final LruBlockCache bc, final int expected) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Map&lt;BlockType, Integer&gt; blocks = bc.getBlockTypeCountsForTest();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    assertEquals(expected, blocks == null? 0:<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      blocks.get(BlockType.DATA) == null? 0:<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      blocks.get(BlockType.DATA).intValue());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>}<a name="line.437"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
index c6abfe5..3734517 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.Deserializer.html
@@ -29,406 +29,420 @@
 <span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertFalse;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.junit.Assert.assertTrue;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.lang.management.ManagementFactory;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.lang.management.MemoryUsage;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.nio.ByteBuffer;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.Path;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HConstants;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.junit.After;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.Before;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.Test;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.experimental.categories.Category;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * Tests that {@link CacheConfig} does as expected.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>// This test is marked as a large test though it runs in a short amount of time<a name="line.56"></a>
-<span class="sourceLineNo">057</span>// (seconds).  It is large because it depends on being able to reset the global<a name="line.57"></a>
-<span class="sourceLineNo">058</span>// blockcache instance which is in a global variable.  Experience has it that<a name="line.58"></a>
-<span class="sourceLineNo">059</span>// tests clash on the global variable if this test is run as small sized test.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>@Category({IOTests.class, LargeTests.class})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class TestCacheConfig {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final Log LOG = LogFactory.getLog(TestCacheConfig.class);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private Configuration conf;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  static class Deserializer implements CacheableDeserializer&lt;Cacheable&gt; {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    private final Cacheable cacheable;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    private int deserializedIdentifier = 0;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>    Deserializer(final Cacheable c) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      deserializedIdentifier = CacheableDeserializerIdManager.registerDeserializer(this);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      this.cacheable = c;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>    @Override<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    public int getDeserialiserIdentifier() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return deserializedIdentifier;<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>    @Override<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    public Cacheable deserialize(ByteBuff b, boolean reuse, MemoryType memType) throws IOException {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      LOG.info("Deserialized " + b + ", reuse=" + reuse);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      return cacheable;<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 Cacheable deserialize(ByteBuff b) throws IOException {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      LOG.info("Deserialized " + b);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      return cacheable;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  };<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  static class IndexCacheEntry extends DataCacheEntry {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    private static IndexCacheEntry SINGLETON = new IndexCacheEntry();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    public IndexCacheEntry() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      super(SINGLETON);<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 BlockType getBlockType() {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      return BlockType.ROOT_INDEX;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  static class DataCacheEntry implements Cacheable {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    private static final int SIZE = 1;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    private static DataCacheEntry SINGLETON = new DataCacheEntry();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    final CacheableDeserializer&lt;Cacheable&gt; deserializer;<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>    DataCacheEntry() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      this(SINGLETON);<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>    DataCacheEntry(final Cacheable c) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      this.deserializer = new Deserializer(c);<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 String toString() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return "size=" + SIZE + ", type=" + getBlockType();<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 heapSize() {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return SIZE;<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 int getSerializedLength() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      return SIZE;<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 void serialize(ByteBuffer destination) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.info("Serialized " + this + " to " + destination);<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 CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      return this.deserializer;<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 BlockType getBlockType() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return BlockType.DATA;<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 MemoryType getMemoryType() {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return MemoryType.EXCLUSIVE;<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>  static class MetaCacheEntry extends DataCacheEntry {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public BlockType getBlockType() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return BlockType.INTERMEDIATE_INDEX;<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><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Before<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void setUp() throws Exception {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    CacheConfig.clearGlobalInstances();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.conf = HBaseConfiguration.create();<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>  @After<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public void tearDown() throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    // Let go of current block cache.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    CacheConfig.clearGlobalInstances();<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 name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param cc<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param doubling If true, addition of element ups counter by 2, not 1, because element added<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * to onheap and offheap caches.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param sizing True if we should run sizing test (doesn't always apply).<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  void basicBlockCacheOps(final CacheConfig cc, final boolean doubling,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean sizing) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    BlockCache bc = cc.getBlockCache();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    BlockCacheKey bck = new BlockCacheKey("f", 0);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    Cacheable c = new DataCacheEntry();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // Do asserts on block counting.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    long initialBlockCount = bc.getBlockCount();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    assertEquals(doubling? 2: 1, bc.getBlockCount() - initialBlockCount);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    bc.evictBlock(bck);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertEquals(initialBlockCount, bc.getBlockCount());<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // Do size accounting.  Do it after the above 'warm-up' because it looks like some<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    // buffers do lazy allocation so sizes are off on first go around.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (sizing) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      long originalSize = bc.getCurrentSize();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      assertTrue(bc.getCurrentSize() &gt; originalSize);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      bc.evictBlock(bck);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      long size = bc.getCurrentSize();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      assertEquals(originalSize, size);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param cc<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param filename<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  private long cacheDataBlock(final CacheConfig cc, final String filename) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    BlockCacheKey bck = new BlockCacheKey(filename, 0);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    Cacheable c = new DataCacheEntry();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // Do asserts on block counting.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    cc.getBlockCache().cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return cc.getBlockCache().getBlockCount();<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>  @Test<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public void testDisableCacheDataBlock() throws IOException {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    Configuration conf = HBaseConfiguration.create();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    CacheConfig cacheConfig = new CacheConfig(conf);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    assertFalse(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    assertFalse(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, true);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    conf.setBoolean(CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY, true);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    conf.setBoolean(CacheConfig.CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    conf.setBoolean(CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY, true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>    cacheConfig = new CacheConfig(conf);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    assertTrue(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertTrue(cacheConfig.shouldCacheDataCompressed());<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    assertTrue(cacheConfig.shouldCacheDataOnWrite());<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, false);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    cacheConfig = new CacheConfig(conf);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, true);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    HColumnDescriptor family = new HColumnDescriptor("testDisableCacheDataBlock");<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    family.setBlockCacheEnabled(false);<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    cacheConfig = new CacheConfig(conf, family);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  @Test<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public void testCacheConfigDefaultLRUBlockCache() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    basicBlockCacheOps(cc, false, true);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<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>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  @Test<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public void testOffHeapBucketCacheConfig() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  public void testOnHeapBucketCacheConfig() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "heap");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  public void testFileBucketCacheConfig() throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    HBaseTestingUtility htu = new HBaseTestingUtility(this.conf);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    try {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      Path p = new Path(htu.getDataTestDir(), "bc.txt");<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      FileSystem fs = FileSystem.get(this.conf);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      fs.create(p).close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "file:" + p);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      doBucketCacheConfigTest();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    } finally {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      htu.cleanupTestDir();<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>  private void doBucketCacheConfigTest() {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final int bcSize = 100;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    basicBlockCacheOps(cc, false, false);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    BlockCache [] bcs = cbc.getBlockCaches();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    assertTrue(bcs[0] instanceof LruBlockCache);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LruBlockCache lbc = (LruBlockCache)bcs[0];<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    assertEquals(MemorySizeUtil.getLruCacheSize(this.conf), lbc.getMaxSize());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    assertTrue(bcs[1] instanceof BucketCache);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    BucketCache bc = (BucketCache)bcs[1];<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    assertEquals(bcSize, bc.getMaxSize() / (1024 * 1024));<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>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * LruBlockCache as L1 with a BucketCache for L2.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  @Test (timeout=10000)<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  public void testBucketCacheConfigL1L2Setup() {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Make lru size is smaller than bcSize for sure.  Need this to be true so when eviction<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    // from L1 happens, it does not fail because L2 can't take the eviction because block too big.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    this.conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.001f);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    long lruExpectedSize = MemorySizeUtil.getLruCacheSize(this.conf);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    final int bcSize = 100;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    long bcExpectedSize = 100 * 1024 * 1024; // MB.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    assertTrue(lruExpectedSize &lt; bcExpectedSize);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    this.conf.setBoolean(CacheConfig.BUCKET_CACHE_COMBINED_KEY, false);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    basicBlockCacheOps(cc, false, false);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    LruBlockCache lbc = (LruBlockCache)cc.getBlockCache();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    assertEquals(lruExpectedSize, lbc.getMaxSize());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    BlockCache bc = lbc.getVictimHandler();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    assertEquals(bcExpectedSize, ((BucketCache) bc).getMaxSize());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // Test the L1+L2 deploy works as we'd expect with blocks evicted from L1 going to L2.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    long initialL1BlockCount = lbc.getBlockCount();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    long initialL2BlockCount = bc.getBlockCount();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    Cacheable c = new DataCacheEntry();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    BlockCacheKey bck = new BlockCacheKey("bck", 0);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    lbc.cacheBlock(bck, c, false, false);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    assertEquals(initialL1BlockCount + 1, lbc.getBlockCount());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    assertEquals(initialL2BlockCount, bc.getBlockCount());<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // Force evictions by putting in a block too big.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    final long justTooBigSize = lbc.acceptableSize() + 1;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    lbc.cacheBlock(new BlockCacheKey("bck2", 0), new DataCacheEntry() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      @Override<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      public long heapSize() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        return justTooBigSize;<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 int getSerializedLength() {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        return (int)heapSize();<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>    // The eviction thread in lrublockcache needs to run.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    while (initialL1BlockCount != lbc.getBlockCount()) Threads.sleep(10);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    assertEquals(initialL1BlockCount, lbc.getBlockCount());<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    long count = bc.getBlockCount();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    assertTrue(initialL2BlockCount + 1 &lt;= count);<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>   * Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * LruBlockCache when using CombinedBlockCcahe.<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Test<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public void testCacheDataInL1() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, 100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    // Add a data block.  Should go into L2, into the Bucket Cache, not the LruBlockCache.<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    cacheDataBlock(cc, "1");<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    LruBlockCache lrubc = (LruBlockCache)cbc.getBlockCaches()[0];<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    assertDataBlockCount(lrubc, 0);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // Enable our test flag.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    cc.setCacheDataInL1(true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    cacheDataBlock(cc, "2");<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    assertDataBlockCount(lrubc, 1);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    cc.setCacheDataInL1(false);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    cacheDataBlock(cc, "3");<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    assertDataBlockCount(lrubc, 1);<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>  private void assertDataBlockCount(final LruBlockCache bc, final int expected) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Map&lt;BlockType, Integer&gt; blocks = bc.getBlockTypeCountsForTest();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    assertEquals(expected, blocks == null? 0:<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      blocks.get(BlockType.DATA) == null? 0:<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      blocks.get(BlockType.DATA).intValue());<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>}<a name="line.423"></a>
+<span class="sourceLineNo">024</span>import static org.junit.Assert.fail;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.lang.management.ManagementFactory;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.lang.management.MemoryUsage;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.nio.ByteBuffer;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FileSystem;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.fs.Path;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.After;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.Before;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>/**<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * Tests that {@link CacheConfig} does as expected.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>// This test is marked as a large test though it runs in a short amount of time<a name="line.57"></a>
+<span class="sourceLineNo">058</span>// (seconds).  It is large because it depends on being able to reset the global<a name="line.58"></a>
+<span class="sourceLineNo">059</span>// blockcache instance which is in a global variable.  Experience has it that<a name="line.59"></a>
+<span class="sourceLineNo">060</span>// tests clash on the global variable if this test is run as small sized test.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>@Category({IOTests.class, LargeTests.class})<a name="line.61"></a>
+<span class="sourceLineNo">062</span>public class TestCacheConfig {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final Log LOG = LogFactory.getLog(TestCacheConfig.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private Configuration conf;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  static class Deserializer implements CacheableDeserializer&lt;Cacheable&gt; {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    private final Cacheable cacheable;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    private int deserializedIdentifier = 0;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>    Deserializer(final Cacheable c) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      deserializedIdentifier = CacheableDeserializerIdManager.registerDeserializer(this);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      this.cacheable = c;<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>    @Override<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    public int getDeserialiserIdentifier() {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      return deserializedIdentifier;<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 Cacheable deserialize(ByteBuff b, boolean reuse, MemoryType memType) throws IOException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      LOG.info("Deserialized " + b + ", reuse=" + reuse);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      return cacheable;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    @Override<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    public Cacheable deserialize(ByteBuff b) throws IOException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      LOG.info("Deserialized " + b);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      return cacheable;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  };<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  static class IndexCacheEntry extends DataCacheEntry {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    private static IndexCacheEntry SINGLETON = new IndexCacheEntry();<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    public IndexCacheEntry() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      super(SINGLETON);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    @Override<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public BlockType getBlockType() {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      return BlockType.ROOT_INDEX;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  static class DataCacheEntry implements Cacheable {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    private static final int SIZE = 1;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    private static DataCacheEntry SINGLETON = new DataCacheEntry();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    final CacheableDeserializer&lt;Cacheable&gt; deserializer;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>    DataCacheEntry() {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      this(SINGLETON);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>    DataCacheEntry(final Cacheable c) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      this.deserializer = new Deserializer(c);<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 String toString() {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      return "size=" + SIZE + ", type=" + getBlockType();<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 heapSize() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      return SIZE;<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 int getSerializedLength() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return SIZE;<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 void serialize(ByteBuffer destination) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.info("Serialized " + this + " to " + destination);<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 CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      return this.deserializer;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    public BlockType getBlockType() {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      return BlockType.DATA;<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 MemoryType getMemoryType() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return MemoryType.EXCLUSIVE;<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>  static class MetaCacheEntry extends DataCacheEntry {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public BlockType getBlockType() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return BlockType.INTERMEDIATE_INDEX;<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><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Before<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void setUp() throws Exception {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    CacheConfig.clearGlobalInstances();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.conf = HBaseConfiguration.create();<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>  @After<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public void tearDown() throws Exception {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // Let go of current block cache.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    CacheConfig.clearGlobalInstances();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @param cc<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * @param doubling If true, addition of element ups counter by 2, not 1, because element added<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * to onheap and offheap caches.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @param sizing True if we should run sizing test (doesn't always apply).<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  void basicBlockCacheOps(final CacheConfig cc, final boolean doubling,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean sizing) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    BlockCache bc = cc.getBlockCache();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    BlockCacheKey bck = new BlockCacheKey("f", 0);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    Cacheable c = new DataCacheEntry();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // Do asserts on block counting.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    long initialBlockCount = bc.getBlockCount();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    assertEquals(doubling? 2: 1, bc.getBlockCount() - initialBlockCount);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    bc.evictBlock(bck);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertEquals(initialBlockCount, bc.getBlockCount());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // Do size accounting.  Do it after the above 'warm-up' because it looks like some<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // buffers do lazy allocation so sizes are off on first go around.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (sizing) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      long originalSize = bc.getCurrentSize();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      assertTrue(bc.getCurrentSize() &gt; originalSize);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      bc.evictBlock(bck);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      long size = bc.getCurrentSize();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      assertEquals(originalSize, size);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  /**<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param cc<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param filename<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * @return<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  private long cacheDataBlock(final CacheConfig cc, final String filename) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    BlockCacheKey bck = new BlockCacheKey(filename, 0);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    Cacheable c = new DataCacheEntry();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // Do asserts on block counting.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    cc.getBlockCache().cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    return cc.getBlockCache().getBlockCount();<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>  @Test<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public void testDisableCacheDataBlock() throws IOException {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    Configuration conf = HBaseConfiguration.create();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    CacheConfig cacheConfig = new CacheConfig(conf);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    assertFalse(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertFalse(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, true);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    conf.setBoolean(CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY, true);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    conf.setBoolean(CacheConfig.CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, true);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    conf.setBoolean(CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY, true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    cacheConfig = new CacheConfig(conf);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    assertTrue(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertTrue(cacheConfig.shouldCacheDataCompressed());<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assertTrue(cacheConfig.shouldCacheDataOnWrite());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, false);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>    cacheConfig = new CacheConfig(conf);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, true);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    HColumnDescriptor family = new HColumnDescriptor("testDisableCacheDataBlock");<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    family.setBlockCacheEnabled(false);<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    cacheConfig = new CacheConfig(conf, family);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<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>  @Test<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public void testCacheConfigDefaultLRUBlockCache() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    basicBlockCacheOps(cc, false, true);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<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>  /**<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @Test<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public void testOffHeapBucketCacheConfig() {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public void testOnHeapBucketCacheConfig() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "heap");<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public void testFileBucketCacheConfig() throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    HBaseTestingUtility htu = new HBaseTestingUtility(this.conf);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      Path p = new Path(htu.getDataTestDir(), "bc.txt");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      FileSystem fs = FileSystem.get(this.conf);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      fs.create(p).close();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "file:" + p);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      doBucketCacheConfigTest();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } finally {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      htu.cleanupTestDir();<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>  private void doBucketCacheConfigTest() {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    final int bcSize = 100;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    basicBlockCacheOps(cc, false, false);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    BlockCache [] bcs = cbc.getBlockCaches();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    assertTrue(bcs[0] instanceof LruBlockCache);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LruBlockCache lbc = (LruBlockCache)bcs[0];<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    assertEquals(MemorySizeUtil.getLruCacheSize(this.conf), lbc.getMaxSize());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    assertTrue(bcs[1] instanceof BucketCache);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    BucketCache bc = (BucketCache)bcs[1];<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    assertEquals(bcSize, bc.getMaxSize() / (1024 * 1024));<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * LruBlockCache as L1 with a BucketCache for L2.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  @Test (timeout=10000)<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public void testBucketCacheConfigL1L2Setup() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Make lru size is smaller than bcSize for sure.  Need this to be true so when eviction<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    // from L1 happens, it does not fail because L2 can't take the eviction because block too big.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    this.conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.001f);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    long lruExpectedSize = MemorySizeUtil.getLruCacheSize(this.conf);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    final int bcSize = 100;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    long bcExpectedSize = 100 * 1024 * 1024; // MB.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    assertTrue(lruExpectedSize &lt; bcExpectedSize);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    this.conf.setBoolean(CacheConfig.BUCKET_CACHE_COMBINED_KEY, false);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    basicBlockCacheOps(cc, false, false);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    LruBlockCache lbc = (LruBlockCache)cc.getBlockCache();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    assertEquals(lruExpectedSize, lbc.getMaxSize());<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    BlockCache bc = lbc.getVictimHandler();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    assertEquals(bcExpectedSize, ((BucketCache) bc).getMaxSize());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    // Test the L1+L2 deploy works as we'd expect with blocks evicted from L1 going to L2.<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    long initialL1BlockCount = lbc.getBlockCount();<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    long initialL2BlockCount = bc.getBlockCount();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    Cacheable c = new DataCacheEntry();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    BlockCacheKey bck = new BlockCacheKey("bck", 0);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    lbc.cacheBlock(bck, c, false, false);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    assertEquals(initialL1BlockCount + 1, lbc.getBlockCount());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertEquals(initialL2BlockCount, bc.getBlockCount());<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // Force evictions by putting in a block too big.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    final long justTooBigSize = lbc.acceptableSize() + 1;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    lbc.cacheBlock(new BlockCacheKey("bck2", 0), new DataCacheEntry() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      @Override<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      public long heapSize() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        return justTooBigSize;<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 int getSerializedLength() {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        return (int)heapSize();<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>    // The eviction thread in lrublockcache needs to run.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    while (initialL1BlockCount != lbc.getBlockCount()) Threads.sleep(10);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    assertEquals(initialL1BlockCount, lbc.getBlockCount());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    long count = bc.getBlockCount();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    assertTrue(initialL2BlockCount + 1 &lt;= count);<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * LruBlockCache when using CombinedBlockCcahe.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Test<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public void testCacheDataInL1() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, 100);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    // Add a data block.  Should go into L2, into the Bucket Cache, not the LruBlockCache.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    cacheDataBlock(cc, "1");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    LruBlockCache lrubc = (LruBlockCache)cbc.getBlockCaches()[0];<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    assertDataBlockCount(lrubc, 0);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // Enable our test flag.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    cc.setCacheDataInL1(true);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    cacheDataBlock(cc, "2");<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    assertDataBlockCount(lrubc, 1);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    cc.setCacheDataInL1(false);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    cacheDataBlock(cc, "3");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    assertDataBlockCount(lrubc, 1);<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>  @Test<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  public void testL2CacheWithInvalidBucketSize() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    Configuration c = new Configuration(this.conf);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    c.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    c.set(CacheConfig.BUCKET_CACHE_BUCKETS_KEY, "256,512,1024,2048,4000,4096");<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    c.setFloat(HConstants.BUCKET_CACHE_SIZE_KEY, 1024);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    try {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      CacheConfig.getL2(c);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      fail("Should throw IllegalArgumentException when passing illegal value for bucket size");<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    } catch (IllegalArgumentException e) {<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><a name="line.430"></a>
+<span class="sourceLineNo">431</span>  private void assertDataBlockCount(final LruBlockCache bc, final int expected) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Map&lt;BlockType, Integer&gt; blocks = bc.getBlockTypeCountsForTest();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    assertEquals(expected, blocks == null? 0:<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      blocks.get(BlockType.DATA) == null? 0:<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      blocks.get(BlockType.DATA).intValue());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>}<a name="line.437"></a>
 
 
 


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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index 33cb6b6..7cba16c 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -248,8 +248,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
index da67f01..5ddd142 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html#line.411">DumpReplicationQueues.WarnOnlyAbortable</a>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html#line.414">DumpReplicationQueues.WarnOnlyAbortable</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a></pre>
 </li>
@@ -198,7 +198,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WarnOnlyAbortable</h4>
-<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html#line.411">WarnOnlyAbortable</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html#line.414">WarnOnlyAbortable</a>()</pre>
 </li>
 </ul>
 </li>
@@ -215,7 +215,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>abort</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html#line.413">abort</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html#line.416">abort</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why,
                   <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;e)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Abortable.html#abort-java.lang.String-java.lang.Throwable-">Abortable</a></code></span></div>
 <div class="block">Abort the server or client.</div>
@@ -234,7 +234,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isAborted</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html#line.421">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyAbortable.html#line.424">isAborted</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Abortable.html#isAborted--">Abortable</a></code></span></div>
 <div class="block">Check if the server or client was aborted.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html
index 988fec2..2bf9cd7 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html#line.426">DumpReplicationQueues.WarnOnlyStoppable</a>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html#line.429">DumpReplicationQueues.WarnOnlyStoppable</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></pre>
 </li>
@@ -195,7 +195,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WarnOnlyStoppable</h4>
-<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html#line.426">WarnOnlyStoppable</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html#line.429">WarnOnlyStoppable</a>()</pre>
 </li>
 </ul>
 </li>
@@ -212,7 +212,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockList">
 <li class="blockList">
 <h4>stop</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html#line.428">stop</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html#line.431">stop</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#stop-java.lang.String-">Stoppable</a></code></span></div>
 <div class="block">Stop this service.
  Implementers should favor logging errors over throwing RuntimeExceptions.</div>
@@ -230,7 +230,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" ti
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isStopped</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html#line.433">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.WarnOnlyStoppable.html#line.436">isStopped</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html#isStopped--">isStopped</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html
index 96e9db1..cb1c51f 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html
@@ -551,7 +551,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>formatQueue</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html#line.351">formatQueue</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regionserver,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html#line.354">formatQueue</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regionserver,
                            <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueues.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueues</a>&nbsp;replicationQueues,
                            <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueInfo.html" title="class in org.apache.hadoop.hbase.replication">ReplicationQueueInfo</a>&nbsp;queueInfo,
                            <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;queueId,
@@ -571,7 +571,7 @@ implements org.apache.hadoop.util.Tool</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getTotalWALSize</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html#line.388">getTotalWALSize</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html#line.391">getTotalWALSize</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                              <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;wals,
                              <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;server)
                       throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>

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

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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html
index b7c7695..516b68a 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.116">ByteBufferArray.BufferCreatorCallable</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.123">ByteBufferArray.BufferCreatorCallable</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>[]&gt;</pre>
 <div class="block">A callable that creates buffers of the specified length either onheap/offheap using the
@@ -223,7 +223,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>bufferCapacity</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.117">bufferCapacity</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.124">bufferCapacity</a></pre>
 </li>
 </ul>
 <a name="directByteBuffer">
@@ -232,7 +232,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>directByteBuffer</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.118">directByteBuffer</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.125">directByteBuffer</a></pre>
 </li>
 </ul>
 <a name="bufferCount">
@@ -241,7 +241,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockList">
 <li class="blockList">
 <h4>bufferCount</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.119">bufferCount</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.126">bufferCount</a></pre>
 </li>
 </ul>
 <a name="allocator">
@@ -250,7 +250,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>allocator</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.120">allocator</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.127">allocator</a></pre>
 </li>
 </ul>
 </li>
@@ -267,7 +267,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BufferCreatorCallable</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.122">BufferCreatorCallable</a>(int&nbsp;bufferCapacity,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.129">BufferCreatorCallable</a>(int&nbsp;bufferCapacity,
                       boolean&nbsp;directByteBuffer,
                       int&nbsp;bufferCount,
                       <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a>&nbsp;allocator)</pre>
@@ -287,7 +287,7 @@ implements <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurren
 <ul class="blockListLast">
 <li class="blockList">
 <h4>call</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.131">call</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.BufferCreatorCallable.html#line.138">call</a>()
                   throws <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
index aecabb5..a83604a 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
@@ -105,7 +105,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.205">ByteBufferArray.Visitor</a></pre>
+<pre>private static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.212">ByteBufferArray.Visitor</a></pre>
 </li>
 </ul>
 </div>
@@ -157,7 +157,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>visit</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html#line.216">visit</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;bb,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html#line.223">visit</a>(<a href="http://docs.oracle.com/javase/8/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;bb,
            int&nbsp;pos,
            byte[]&nbsp;array,
            int&nbsp;arrayOffset,

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.html b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.html
index 2c87a19..aa9fa3f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public final class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.47">ByteBufferArray</a>
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.47">ByteBufferArray</a>
 extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">This class manages an array of ByteBuffers with a default size 4MB. These
  buffers are sequential and could be considered as a large buffer.It supports
@@ -160,7 +160,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private int</code></td>
+<td class="colFirst"><code>(package private) int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#bufferCount">bufferCount</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -232,7 +232,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
+<td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#createBuffers-boolean-org.apache.hadoop.hbase.util.ByteBufferAllocator-">createBuffers</a></span>(boolean&nbsp;directByteBuffer,
              <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a>&nbsp;allocator)</code>&nbsp;</td>
 </tr>
@@ -254,6 +254,10 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 </td>
 </tr>
 <tr id="i4" class="altColor">
+<td class="colFirst"><code>(package private) int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#getThreadCount--">getThreadCount</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#multiple-long-int-byte:A-int-org.apache.hadoop.hbase.util.ByteBufferArray.Visitor-">multiple</a></span>(long&nbsp;start,
         int&nbsp;len,
@@ -264,7 +268,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
  given array.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#putMultiple-long-int-byte:A-">putMultiple</a></span>(long&nbsp;start,
            int&nbsp;len,
@@ -272,7 +276,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="block">Transfers bytes from the given source array into this buffer array</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#putMultiple-long-int-byte:A-int-">putMultiple</a></span>(long&nbsp;start,
            int&nbsp;len,
@@ -281,7 +285,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <div class="block">Transfers bytes from the given source array into this buffer array</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#roundUp-long-long-">roundUp</a></span>(long&nbsp;n,
        long&nbsp;to)</code>&nbsp;</td>
@@ -354,7 +358,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>bufferCount</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.54">bufferCount</a></pre>
+<pre>int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.55">bufferCount</a></pre>
 </li>
 </ul>
 <a name="GET_MULTIPLE_VISTOR">
@@ -363,7 +367,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>GET_MULTIPLE_VISTOR</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.169">GET_MULTIPLE_VISTOR</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.176">GET_MULTIPLE_VISTOR</a></pre>
 </li>
 </ul>
 <a name="PUT_MULTIPLE_VISITOR">
@@ -372,7 +376,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PUT_MULTIPLE_VISITOR</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.198">PUT_MULTIPLE_VISITOR</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.205">PUT_MULTIPLE_VISITOR</a></pre>
 </li>
 </ul>
 </li>
@@ -389,7 +393,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ByteBufferArray</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.65">ByteBufferArray</a>(long&nbsp;capacity,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.66">ByteBufferArray</a>(long&nbsp;capacity,
                        boolean&nbsp;directByteBuffer,
                        <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a>&nbsp;allocator)
                 throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -420,22 +424,31 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createBuffers</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.78">createBuffers</a>(boolean&nbsp;directByteBuffer,
-                           <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a>&nbsp;allocator)
-                    throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.80">createBuffers</a>(boolean&nbsp;directByteBuffer,
+                   <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a>&nbsp;allocator)
+            throws <a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
 </dl>
 </li>
 </ul>
+<a name="getThreadCount--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getThreadCount</h4>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.115">getThreadCount</a>()</pre>
+</li>
+</ul>
 <a name="roundUp-long-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>roundUp</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.140">roundUp</a>(long&nbsp;n,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.147">roundUp</a>(long&nbsp;n,
                      long&nbsp;to)</pre>
 </li>
 </ul>
@@ -445,7 +458,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMultiple</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.151">getMultiple</a>(long&nbsp;start,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.158">getMultiple</a>(long&nbsp;start,
                        int&nbsp;len,
                        byte[]&nbsp;dstArray)</pre>
 <div class="block">Transfers bytes from this buffer array into the given destination array</div>
@@ -465,7 +478,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMultiple</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.164">getMultiple</a>(long&nbsp;start,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.171">getMultiple</a>(long&nbsp;start,
                        int&nbsp;len,
                        byte[]&nbsp;dstArray,
                        int&nbsp;dstOffset)</pre>
@@ -488,7 +501,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>putMultiple</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.182">putMultiple</a>(long&nbsp;start,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.189">putMultiple</a>(long&nbsp;start,
                         int&nbsp;len,
                         byte[]&nbsp;srcArray)</pre>
 <div class="block">Transfers bytes from the given source array into this buffer array</div>
@@ -506,7 +519,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>putMultiple</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.194">putMultiple</a>(long&nbsp;start,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.201">putMultiple</a>(long&nbsp;start,
                         int&nbsp;len,
                         byte[]&nbsp;srcArray,
                         int&nbsp;srcOffset)</pre>
@@ -527,7 +540,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>multiple</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.230">multiple</a>(long&nbsp;start,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.237">multiple</a>(long&nbsp;start,
               int&nbsp;len,
               byte[]&nbsp;array,
               int&nbsp;arrayOffset,
@@ -552,7 +565,7 @@ extends <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>asSubByteBuff</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.274">asSubByteBuff</a>(long&nbsp;offset,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.281">asSubByteBuff</a>(long&nbsp;offset,
                               int&nbsp;len)</pre>
 <div class="block">Creates a ByteBuff from a given array of ByteBuffers from the given offset to the
  length specified. For eg, if there are 4 buffers forming an array each with length 10 and

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferAllocator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferAllocator.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferAllocator.html
index bc0721c..59c973e 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferAllocator.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferAllocator.html
@@ -116,7 +116,7 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private void</code></td>
+<td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><span class="typeNameLabel">ByteBufferArray.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#createBuffers-boolean-org.apache.hadoop.hbase.util.ByteBufferAllocator-">createBuffers</a></span>(boolean&nbsp;directByteBuffer,
              <a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a>&nbsp;allocator)</code>&nbsp;</td>
 </tr>

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/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 3ded3f7..ef802fb 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -167,8 +167,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="http://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">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="typeNameLink">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="typeNameLink">WALFactory.Providers</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index ac28212..e3ff958 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,11 +16,11 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "5f54e28510fdbdc1a08688168f8df19904bcd975";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "bc93b6610b349d38502290af27da0ae0b5fd4936";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Wed Jul 19 21:39:34 UTC 2017";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Thu Jul 20 21:39:28 UTC 2017";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://asf920.gq1.ygridcore.net/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String srcChecksum = "b993c2bc29b4c3bdde7e9ae32a183a0d";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String srcChecksum = "a6f3d1b71623ea149646177599217d87";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html
index a31c60b..f04095f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html
@@ -592,136 +592,145 @@
 <span class="sourceLineNo">584</span>   * @return Returns L2 block cache instance (for now it is BucketCache BlockCache all the time)<a name="line.584"></a>
 <span class="sourceLineNo">585</span>   * or null if not supposed to be a L2.<a name="line.585"></a>
 <span class="sourceLineNo">586</span>   */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  private static BlockCache getL2(final Configuration c) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    final boolean useExternal = c.getBoolean(EXTERNAL_BLOCKCACHE_KEY, EXTERNAL_BLOCKCACHE_DEFAULT);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    if (LOG.isDebugEnabled()) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      LOG.debug("Trying to use " + (useExternal?" External":" Internal") + " l2 cache");<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>    // If we want to use an external block cache then create that.<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    if (useExternal) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      return getExternalBlockcache(c);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">587</span>  @VisibleForTesting<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  static BlockCache getL2(final Configuration c) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    final boolean useExternal = c.getBoolean(EXTERNAL_BLOCKCACHE_KEY, EXTERNAL_BLOCKCACHE_DEFAULT);<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    if (LOG.isDebugEnabled()) {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      LOG.debug("Trying to use " + (useExternal?" External":" Internal") + " l2 cache");<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>    // If we want to use an external block cache then create that.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    if (useExternal) {<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      return getExternalBlockcache(c);<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    }<a name="line.597"></a>
 <span class="sourceLineNo">598</span>    // otherwise use the bucket cache.<a name="line.598"></a>
 <span class="sourceLineNo">599</span>    return getBucketCache(c);<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>  private static BlockCache getExternalBlockcache(Configuration c) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    Class klass = null;<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>    // Get the class, from the config. s<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    try {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      klass = ExternalBlockCaches.valueOf(c.get(EXTERNAL_BLOCKCACHE_CLASS_KEY, "memcache")).clazz;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    } catch (IllegalArgumentException exception) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      try {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        klass = c.getClass(EXTERNAL_BLOCKCACHE_CLASS_KEY, Class.forName(<a name="line.611"></a>
-<span class="sourceLineNo">612</span>            "org.apache.hadoop.hbase.io.hfile.MemcachedBlockCache"));<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      } catch (ClassNotFoundException e) {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        return null;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    // Now try and create an instance of the block cache.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    try {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      LOG.info("Creating external block cache of type: " + klass);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      return (BlockCache) ReflectionUtils.newInstance(klass, c);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    } catch (Exception e) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      LOG.warn("Error creating external block cache", e);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    return null;<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>  }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>  private static BlockCache getBucketCache(Configuration c) {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    // Check for L2.  ioengine name must be non-null.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    String bucketCacheIOEngineName = c.get(BUCKET_CACHE_IOENGINE_KEY, null);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    if (bucketCacheIOEngineName == null || bucketCacheIOEngineName.length() &lt;= 0) return null;<a name="line.632"></a>
-<span class="sourceLineNo">633</span><a name="line.633"></a>
-<span class="sourceLineNo">634</span>    int blockSize = c.getInt(BLOCKCACHE_BLOCKSIZE_KEY, HConstants.DEFAULT_BLOCKSIZE);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    final long bucketCacheSize = MemorySizeUtil.getBucketCacheSize(c);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    if (bucketCacheSize &lt;= 0) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      throw new IllegalStateException("bucketCacheSize &lt;= 0; Check " +<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        BUCKET_CACHE_SIZE_KEY + " setting and/or server java heap size");<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    if (c.get("hbase.bucketcache.percentage.in.combinedcache") != null) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.warn("Configuration 'hbase.bucketcache.percentage.in.combinedcache' is no longer "<a name="line.641"></a>
-<span class="sourceLineNo">642</span>          + "respected. See comments in http://hbase.apache.org/book.html#_changes_of_note");<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    }<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    int writerThreads = c.getInt(BUCKET_CACHE_WRITER_THREADS_KEY,<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      DEFAULT_BUCKET_CACHE_WRITER_THREADS);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    int writerQueueLen = c.getInt(BUCKET_CACHE_WRITER_QUEUE_KEY,<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      DEFAULT_BUCKET_CACHE_WRITER_QUEUE);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    String persistentPath = c.get(BUCKET_CACHE_PERSISTENT_PATH_KEY);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    String[] configuredBucketSizes = c.getStrings(BUCKET_CACHE_BUCKETS_KEY);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    int [] bucketSizes = null;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    if (configuredBucketSizes != null) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      bucketSizes = new int[configuredBucketSizes.length];<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      for (int i = 0; i &lt; configuredBucketSizes.length; i++) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        bucketSizes[i] = Integer.parseInt(configuredBucketSizes[i].trim());<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    BucketCache bucketCache = null;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    try {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      int ioErrorsTolerationDuration = c.getInt(<a name="line.659"></a>
-<span class="sourceLineNo">660</span>        "hbase.bucketcache.ioengine.errors.tolerated.duration",<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        BucketCache.DEFAULT_ERROR_TOLERATION_DURATION);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      // Bucket cache logs its stats on creation internal to the constructor.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      bucketCache = new BucketCache(bucketCacheIOEngineName,<a name="line.663"></a>
-<span class="sourceLineNo">664</span>        bucketCacheSize, blockSize, bucketSizes, writerThreads, writerQueueLen, persistentPath,<a name="line.664"></a>
-<span class="sourceLineNo">665</span>        ioErrorsTolerationDuration);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    } catch (IOException ioex) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      LOG.error("Can't instantiate bucket cache", ioex); throw new RuntimeException(ioex);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    return bucketCache;<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>  /**<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * Returns the block cache or &lt;code&gt;null&lt;/code&gt; in case none should be used.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * Sets GLOBAL_BLOCK_CACHE_INSTANCE<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * @param conf  The current configuration.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   * @return The block cache or &lt;code&gt;null&lt;/code&gt;.<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
-<span class="sourceLineNo">679</span>  public static synchronized BlockCache instantiateBlockCache(Configuration conf) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    if (GLOBAL_BLOCK_CACHE_INSTANCE != null) return GLOBAL_BLOCK_CACHE_INSTANCE;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    if (blockCacheDisabled) return null;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    LruBlockCache l1 = getL1Internal(conf);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    // blockCacheDisabled is set as a side-effect of getL1Internal(), so check it again after the call.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    if (blockCacheDisabled) return null;<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    BlockCache l2 = getL2(conf);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (l2 == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      GLOBAL_BLOCK_CACHE_INSTANCE = l1;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    } else {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      boolean useExternal = conf.getBoolean(EXTERNAL_BLOCKCACHE_KEY, EXTERNAL_BLOCKCACHE_DEFAULT);<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      boolean combinedWithLru = conf.getBoolean(BUCKET_CACHE_COMBINED_KEY,<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        DEFAULT_BUCKET_CACHE_COMBINED);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      if (useExternal) {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>        GLOBAL_BLOCK_CACHE_INSTANCE = new InclusiveCombinedBlockCache(l1, l2);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      } else {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>        if (combinedWithLru) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>          GLOBAL_BLOCK_CACHE_INSTANCE = new CombinedBlockCache(l1, l2);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        } else {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>          // L1 and L2 are not 'combined'.  They are connected via the LruBlockCache victimhandler<a name="line.698"></a>
-<span class="sourceLineNo">699</span>          // mechanism.  It is a little ugly but works according to the following: when the<a name="line.699"></a>
-<span class="sourceLineNo">700</span>          // background eviction thread runs, blocks evicted from L1 will go to L2 AND when we get<a name="line.700"></a>
-<span class="sourceLineNo">701</span>          // a block from the L1 cache, if not in L1, we will search L2.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>          GLOBAL_BLOCK_CACHE_INSTANCE = l1;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>        }<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      l1.setVictimCache(l2);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    return GLOBAL_BLOCK_CACHE_INSTANCE;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>  }<a name="line.708"></a>
-<span class="sourceLineNo">709</span><a name="line.709"></a>
-<span class="sourceLineNo">710</span>  // Supposed to use only from tests. Some tests want to reinit the Global block cache instance<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  @VisibleForTesting<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  static synchronized void clearGlobalInstances() {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    GLOBAL_L1_CACHE_INSTANCE = null;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    GLOBAL_BLOCK_CACHE_INSTANCE = null;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>  }<a name="line.715"></a>
-<span class="sourceLineNo">716</span>}<a name="line.716"></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>  private static BlockCache getExternalBlockcache(Configuration c) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    Class klass = null;<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>    // Get the class, from the config. s<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    try {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      klass = ExternalBlockCaches.valueOf(c.get(EXTERNAL_BLOCKCACHE_CLASS_KEY, "memcache")).clazz;<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    } catch (IllegalArgumentException exception) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      try {<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        klass = c.getClass(EXTERNAL_BLOCKCACHE_CLASS_KEY, Class.forName(<a name="line.610"></a>
+<span class="sourceLineNo">611</span>            "org.apache.hadoop.hbase.io.hfile.MemcachedBlockCache"));<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      } catch (ClassNotFoundException e) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>        return null;<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    // Now try and create an instance of the block cache.<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    try {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      LOG.info("Creating external block cache of type: " + klass);<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      return (BlockCache) ReflectionUtils.newInstance(klass, c);<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    } catch (Exception e) {<a name="line.621"></a>
+<span class="sourceLineNo">622</span>      LOG.warn("Error creating external block cache", e);<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    }<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    return null;<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>  private static BlockCache getBucketCache(Configuration c) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    // Check for L2.  ioengine name must be non-null.<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    String bucketCacheIOEngineName = c.get(BUCKET_CACHE_IOENGINE_KEY, null);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    if (bucketCacheIOEngineName == null || bucketCacheIOEngineName.length() &lt;= 0) return null;<a name="line.631"></a>
+<span class="sourceLineNo">632</span><a name="line.632"></a>
+<span class="sourceLineNo">633</span>    int blockSize = c.getInt(BLOCKCACHE_BLOCKSIZE_KEY, HConstants.DEFAULT_BLOCKSIZE);<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    final long bucketCacheSize = MemorySizeUtil.getBucketCacheSize(c);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    if (bucketCacheSize &lt;= 0) {<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      throw new IllegalStateException("bucketCacheSize &lt;= 0; Check " +<a name="line.636"></a>
+<span class="sourceLineNo">637</span>        BUCKET_CACHE_SIZE_KEY + " setting and/or server java heap size");<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    }<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    if (c.get("hbase.bucketcache.percentage.in.combinedcache") != null) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      LOG.warn("Configuration 'hbase.bucketcache.percentage.in.combinedcache' is no longer "<a name="line.640"></a>
+<span class="sourceLineNo">641</span>          + "respected. See comments in http://hbase.apache.org/book.html#_changes_of_note");<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    }<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    int writerThreads = c.getInt(BUCKET_CACHE_WRITER_THREADS_KEY,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      DEFAULT_BUCKET_CACHE_WRITER_THREADS);<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    int writerQueueLen = c.getInt(BUCKET_CACHE_WRITER_QUEUE_KEY,<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      DEFAULT_BUCKET_CACHE_WRITER_QUEUE);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    String persistentPath = c.get(BUCKET_CACHE_PERSISTENT_PATH_KEY);<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    String[] configuredBucketSizes = c.getStrings(BUCKET_CACHE_BUCKETS_KEY);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    int [] bucketSizes = null;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>    if (configuredBucketSizes != null) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      bucketSizes = new int[configuredBucketSizes.length];<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      for (int i = 0; i &lt; configuredBucketSizes.length; i++) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        int bucketSize = Integer.parseInt(configuredBucketSizes[i].trim());<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        if (bucketSize % 256 != 0) {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          // We need all the bucket sizes to be multiples of 256. Having all the configured bucket<a name="line.655"></a>
+<span class="sourceLineNo">656</span>          // sizes to be multiples of 256 will ensure that the block offsets within buckets,<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          // that are calculated, will also be multiples of 256.<a name="line.657"></a>
+<span class="sourceLineNo">658</span>          // See BucketEntry where offset to each block is represented using 5 bytes (instead of 8<a name="line.658"></a>
+<span class="sourceLineNo">659</span>          // bytes long). We would like to save heap overhead as less as possible.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>          throw new IllegalArgumentException("Illegal value: " + bucketSize + " configured for '"<a name="line.660"></a>
+<span class="sourceLineNo">661</span>              + BUCKET_CACHE_BUCKETS_KEY + "'. All bucket sizes to be multiples of 256");<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        }<a name="line.662"></a>
+<span class="sourceLineNo">663</span>        bucketSizes[i] = bucketSize;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      }<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    BucketCache bucketCache = null;<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    try {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      int ioErrorsTolerationDuration = c.getInt(<a name="line.668"></a>
+<span class="sourceLineNo">669</span>        "hbase.bucketcache.ioengine.errors.tolerated.duration",<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        BucketCache.DEFAULT_ERROR_TOLERATION_DURATION);<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      // Bucket cache logs its stats on creation internal to the constructor.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>      bucketCache = new BucketCache(bucketCacheIOEngineName,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>        bucketCacheSize, blockSize, bucketSizes, writerThreads, writerQueueLen, persistentPath,<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        ioErrorsTolerationDuration);<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    } catch (IOException ioex) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      LOG.error("Can't instantiate bucket cache", ioex); throw new RuntimeException(ioex);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    return bucketCache;<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  }<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>   * Returns the block cache or &lt;code&gt;null&lt;/code&gt; in case none should be used.<a name="line.682"></a>
+<span class="sourceLineNo">683</span>   * Sets GLOBAL_BLOCK_CACHE_INSTANCE<a name="line.683"></a>
+<span class="sourceLineNo">684</span>   *<a name="line.684"></a>
+<span class="sourceLineNo">685</span>   * @param conf  The current configuration.<a name="line.685"></a>
+<span class="sourceLineNo">686</span>   * @return The block cache or &lt;code&gt;null&lt;/code&gt;.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   */<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  public static synchronized BlockCache instantiateBlockCache(Configuration conf) {<a name="line.688"></a>
+<span class="sourceLineNo">689</span>    if (GLOBAL_BLOCK_CACHE_INSTANCE != null) return GLOBAL_BLOCK_CACHE_INSTANCE;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    if (blockCacheDisabled) return null;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    LruBlockCache l1 = getL1Internal(conf);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // blockCacheDisabled is set as a side-effect of getL1Internal(), so check it again after the call.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    if (blockCacheDisabled) return null;<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    BlockCache l2 = getL2(conf);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (l2 == null) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      GLOBAL_BLOCK_CACHE_INSTANCE = l1;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    } else {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      boolean useExternal = conf.getBoolean(EXTERNAL_BLOCKCACHE_KEY, EXTERNAL_BLOCKCACHE_DEFAULT);<a name="line.698"></a>
+<span class="sourceLineNo">699</span>      boolean combinedWithLru = conf.getBoolean(BUCKET_CACHE_COMBINED_KEY,<a name="line.699"></a>
+<span class="sourceLineNo">700</span>        DEFAULT_BUCKET_CACHE_COMBINED);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      if (useExternal) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>        GLOBAL_BLOCK_CACHE_INSTANCE = new InclusiveCombinedBlockCache(l1, l2);<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      } else {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>        if (combinedWithLru) {<a name="line.704"></a>
+<span class="sourceLineNo">705</span>          GLOBAL_BLOCK_CACHE_INSTANCE = new CombinedBlockCache(l1, l2);<a name="line.705"></a>
+<span class="sourceLineNo">706</span>        } else {<a name="line.706"></a>
+<span class="sourceLineNo">707</span>          // L1 and L2 are not 'combined'.  They are connected via the LruBlockCache victimhandler<a name="line.707"></a>
+<span class="sourceLineNo">708</span>          // mechanism.  It is a little ugly but works according to the following: when the<a name="line.708"></a>
+<span class="sourceLineNo">709</span>          // background eviction thread runs, blocks evicted from L1 will go to L2 AND when we get<a name="line.709"></a>
+<span class="sourceLineNo">710</span>          // a block from the L1 cache, if not in L1, we will search L2.<a name="line.710"></a>
+<span class="sourceLineNo">711</span>          GLOBAL_BLOCK_CACHE_INSTANCE = l1;<a name="line.711"></a>
+<span class="sourceLineNo">712</span>        }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      l1.setVictimCache(l2);<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    return GLOBAL_BLOCK_CACHE_INSTANCE;<a name="line.716"></a>
+<span class="sourceLineNo">717</span>  }<a name="line.717"></a>
+<span class="sourceLineNo">718</span><a name="line.718"></a>
+<span class="sourceLineNo">719</span>  // Supposed to use only from tests. Some tests want to reinit the Global block cache instance<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  @VisibleForTesting<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  static synchronized void clearGlobalInstances() {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    GLOBAL_L1_CACHE_INSTANCE = null;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    GLOBAL_BLOCK_CACHE_INSTANCE = null;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>  }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>}<a name="line.725"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
index c6abfe5..3734517 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheConfig.IndexCacheEntry.html
@@ -29,406 +29,420 @@
 <span class="sourceLineNo">021</span>import static org.junit.Assert.assertEquals;<a name="line.21"></a>
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertFalse;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.junit.Assert.assertTrue;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.lang.management.ManagementFactory;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.lang.management.MemoryUsage;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.nio.ByteBuffer;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.Map;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.commons.logging.Log;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.LogFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.Path;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HConstants;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.junit.After;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.junit.Before;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.junit.Test;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.junit.experimental.categories.Category;<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>/**<a name="line.53"></a>
-<span class="sourceLineNo">054</span> * Tests that {@link CacheConfig} does as expected.<a name="line.54"></a>
-<span class="sourceLineNo">055</span> */<a name="line.55"></a>
-<span class="sourceLineNo">056</span>// This test is marked as a large test though it runs in a short amount of time<a name="line.56"></a>
-<span class="sourceLineNo">057</span>// (seconds).  It is large because it depends on being able to reset the global<a name="line.57"></a>
-<span class="sourceLineNo">058</span>// blockcache instance which is in a global variable.  Experience has it that<a name="line.58"></a>
-<span class="sourceLineNo">059</span>// tests clash on the global variable if this test is run as small sized test.<a name="line.59"></a>
-<span class="sourceLineNo">060</span>@Category({IOTests.class, LargeTests.class})<a name="line.60"></a>
-<span class="sourceLineNo">061</span>public class TestCacheConfig {<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private static final Log LOG = LogFactory.getLog(TestCacheConfig.class);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private Configuration conf;<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>  static class Deserializer implements CacheableDeserializer&lt;Cacheable&gt; {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    private final Cacheable cacheable;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    private int deserializedIdentifier = 0;<a name="line.67"></a>
-<span class="sourceLineNo">068</span><a name="line.68"></a>
-<span class="sourceLineNo">069</span>    Deserializer(final Cacheable c) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      deserializedIdentifier = CacheableDeserializerIdManager.registerDeserializer(this);<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      this.cacheable = c;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>    @Override<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    public int getDeserialiserIdentifier() {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>      return deserializedIdentifier;<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>    @Override<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    public Cacheable deserialize(ByteBuff b, boolean reuse, MemoryType memType) throws IOException {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      LOG.info("Deserialized " + b + ", reuse=" + reuse);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      return cacheable;<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 Cacheable deserialize(ByteBuff b) throws IOException {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      LOG.info("Deserialized " + b);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      return cacheable;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    }<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  };<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  static class IndexCacheEntry extends DataCacheEntry {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    private static IndexCacheEntry SINGLETON = new IndexCacheEntry();<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>    public IndexCacheEntry() {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      super(SINGLETON);<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 BlockType getBlockType() {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      return BlockType.ROOT_INDEX;<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
-<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
-<span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>  static class DataCacheEntry implements Cacheable {<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    private static final int SIZE = 1;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    private static DataCacheEntry SINGLETON = new DataCacheEntry();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    final CacheableDeserializer&lt;Cacheable&gt; deserializer;<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>    DataCacheEntry() {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      this(SINGLETON);<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>    DataCacheEntry(final Cacheable c) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      this.deserializer = new Deserializer(c);<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 String toString() {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      return "size=" + SIZE + ", type=" + getBlockType();<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 heapSize() {<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      return SIZE;<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 int getSerializedLength() {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      return SIZE;<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 void serialize(ByteBuffer destination) {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      LOG.info("Serialized " + this + " to " + destination);<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 CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      return this.deserializer;<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 BlockType getBlockType() {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      return BlockType.DATA;<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 MemoryType getMemoryType() {<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      return MemoryType.EXCLUSIVE;<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>  static class MetaCacheEntry extends DataCacheEntry {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    @Override<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    public BlockType getBlockType() {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>      return BlockType.INTERMEDIATE_INDEX;<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><a name="line.160"></a>
-<span class="sourceLineNo">161</span>  @Before<a name="line.161"></a>
-<span class="sourceLineNo">162</span>  public void setUp() throws Exception {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    CacheConfig.clearGlobalInstances();<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.conf = HBaseConfiguration.create();<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>  @After<a name="line.167"></a>
-<span class="sourceLineNo">168</span>  public void tearDown() throws Exception {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    // Let go of current block cache.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    CacheConfig.clearGlobalInstances();<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 name="line.173"></a>
-<span class="sourceLineNo">174</span>   * @param cc<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   * @param doubling If true, addition of element ups counter by 2, not 1, because element added<a name="line.175"></a>
-<span class="sourceLineNo">176</span>   * to onheap and offheap caches.<a name="line.176"></a>
-<span class="sourceLineNo">177</span>   * @param sizing True if we should run sizing test (doesn't always apply).<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   */<a name="line.178"></a>
-<span class="sourceLineNo">179</span>  void basicBlockCacheOps(final CacheConfig cc, final boolean doubling,<a name="line.179"></a>
-<span class="sourceLineNo">180</span>      final boolean sizing) {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    BlockCache bc = cc.getBlockCache();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    BlockCacheKey bck = new BlockCacheKey("f", 0);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>    Cacheable c = new DataCacheEntry();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    // Do asserts on block counting.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    long initialBlockCount = bc.getBlockCount();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    assertEquals(doubling? 2: 1, bc.getBlockCount() - initialBlockCount);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    bc.evictBlock(bck);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    assertEquals(initialBlockCount, bc.getBlockCount());<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    // Do size accounting.  Do it after the above 'warm-up' because it looks like some<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    // buffers do lazy allocation so sizes are off on first go around.<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    if (sizing) {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      long originalSize = bc.getCurrentSize();<a name="line.195"></a>
-<span class="sourceLineNo">196</span>      bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      assertTrue(bc.getCurrentSize() &gt; originalSize);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>      bc.evictBlock(bck);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      long size = bc.getCurrentSize();<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      assertEquals(originalSize, size);<a name="line.200"></a>
-<span class="sourceLineNo">201</span>    }<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  }<a name="line.202"></a>
-<span class="sourceLineNo">203</span><a name="line.203"></a>
-<span class="sourceLineNo">204</span>  /**<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param cc<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param filename<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  private long cacheDataBlock(final CacheConfig cc, final String filename) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    BlockCacheKey bck = new BlockCacheKey(filename, 0);<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    Cacheable c = new DataCacheEntry();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    // Do asserts on block counting.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    cc.getBlockCache().cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    return cc.getBlockCache().getBlockCount();<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>  @Test<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  public void testDisableCacheDataBlock() throws IOException {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    Configuration conf = HBaseConfiguration.create();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    CacheConfig cacheConfig = new CacheConfig(conf);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    assertFalse(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    assertFalse(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, true);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    conf.setBoolean(CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY, true);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    conf.setBoolean(CacheConfig.CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, true);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    conf.setBoolean(CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY, true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>    cacheConfig = new CacheConfig(conf);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    assertTrue(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    assertTrue(cacheConfig.shouldCacheDataCompressed());<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    assertTrue(cacheConfig.shouldCacheDataOnWrite());<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, false);<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    cacheConfig = new CacheConfig(conf);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.254"></a>
-<span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.256"></a>
-<span class="sourceLineNo">257</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.260"></a>
-<span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.261"></a>
-<span class="sourceLineNo">262</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.262"></a>
-<span class="sourceLineNo">263</span><a name="line.263"></a>
-<span class="sourceLineNo">264</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, true);<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.265"></a>
-<span class="sourceLineNo">266</span><a name="line.266"></a>
-<span class="sourceLineNo">267</span>    HColumnDescriptor family = new HColumnDescriptor("testDisableCacheDataBlock");<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    family.setBlockCacheEnabled(false);<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    cacheConfig = new CacheConfig(conf, family);<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.280"></a>
-<span class="sourceLineNo">281</span>  }<a name="line.281"></a>
-<span class="sourceLineNo">282</span><a name="line.282"></a>
-<span class="sourceLineNo">283</span>  @Test<a name="line.283"></a>
-<span class="sourceLineNo">284</span>  public void testCacheConfigDefaultLRUBlockCache() {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    basicBlockCacheOps(cc, false, true);<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<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>  /**<a name="line.292"></a>
-<span class="sourceLineNo">293</span>   * Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.<a name="line.293"></a>
-<span class="sourceLineNo">294</span>   */<a name="line.294"></a>
-<span class="sourceLineNo">295</span>  @Test<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public void testOffHeapBucketCacheConfig() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.301"></a>
-<span class="sourceLineNo">302</span>  public void testOnHeapBucketCacheConfig() {<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "heap");<a name="line.303"></a>
-<span class="sourceLineNo">304</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.307"></a>
-<span class="sourceLineNo">308</span>  public void testFileBucketCacheConfig() throws IOException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    HBaseTestingUtility htu = new HBaseTestingUtility(this.conf);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    try {<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      Path p = new Path(htu.getDataTestDir(), "bc.txt");<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      FileSystem fs = FileSystem.get(this.conf);<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      fs.create(p).close();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>      this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "file:" + p);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>      doBucketCacheConfigTest();<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    } finally {<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      htu.cleanupTestDir();<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>  private void doBucketCacheConfigTest() {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    final int bcSize = 100;<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    basicBlockCacheOps(cc, false, false);<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    BlockCache [] bcs = cbc.getBlockCaches();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>    assertTrue(bcs[0] instanceof LruBlockCache);<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    LruBlockCache lbc = (LruBlockCache)bcs[0];<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    assertEquals(MemorySizeUtil.getLruCacheSize(this.conf), lbc.getMaxSize());<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    assertTrue(bcs[1] instanceof BucketCache);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    BucketCache bc = (BucketCache)bcs[1];<a name="line.334"></a>
-<span class="sourceLineNo">335</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    assertEquals(bcSize, bc.getMaxSize() / (1024 * 1024));<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>  /**<a name="line.339"></a>
-<span class="sourceLineNo">340</span>   * Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * LruBlockCache as L1 with a BucketCache for L2.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   */<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  @Test (timeout=10000)<a name="line.343"></a>
-<span class="sourceLineNo">344</span>  public void testBucketCacheConfigL1L2Setup() {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    // Make lru size is smaller than bcSize for sure.  Need this to be true so when eviction<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    // from L1 happens, it does not fail because L2 can't take the eviction because block too big.<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    this.conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.001f);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();<a name="line.349"></a>
-<span class="sourceLineNo">350</span>    long lruExpectedSize = MemorySizeUtil.getLruCacheSize(this.conf);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    final int bcSize = 100;<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    long bcExpectedSize = 100 * 1024 * 1024; // MB.<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    assertTrue(lruExpectedSize &lt; bcExpectedSize);<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    this.conf.setBoolean(CacheConfig.BUCKET_CACHE_COMBINED_KEY, false);<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    basicBlockCacheOps(cc, false, false);<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    LruBlockCache lbc = (LruBlockCache)cc.getBlockCache();<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    assertEquals(lruExpectedSize, lbc.getMaxSize());<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    BlockCache bc = lbc.getVictimHandler();<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    assertEquals(bcExpectedSize, ((BucketCache) bc).getMaxSize());<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    // Test the L1+L2 deploy works as we'd expect with blocks evicted from L1 going to L2.<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    long initialL1BlockCount = lbc.getBlockCount();<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    long initialL2BlockCount = bc.getBlockCount();<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    Cacheable c = new DataCacheEntry();<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    BlockCacheKey bck = new BlockCacheKey("bck", 0);<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    lbc.cacheBlock(bck, c, false, false);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    assertEquals(initialL1BlockCount + 1, lbc.getBlockCount());<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    assertEquals(initialL2BlockCount, bc.getBlockCount());<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // Force evictions by putting in a block too big.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    final long justTooBigSize = lbc.acceptableSize() + 1;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    lbc.cacheBlock(new BlockCacheKey("bck2", 0), new DataCacheEntry() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      @Override<a name="line.376"></a>
-<span class="sourceLineNo">377</span>      public long heapSize() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>        return justTooBigSize;<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 int getSerializedLength() {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        return (int)heapSize();<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>    // The eviction thread in lrublockcache needs to run.<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    while (initialL1BlockCount != lbc.getBlockCount()) Threads.sleep(10);<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    assertEquals(initialL1BlockCount, lbc.getBlockCount());<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    long count = bc.getBlockCount();<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    assertTrue(initialL2BlockCount + 1 &lt;= count);<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>   * Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in<a name="line.394"></a>
-<span class="sourceLineNo">395</span>   * LruBlockCache when using CombinedBlockCcahe.<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  @Test<a name="line.397"></a>
-<span class="sourceLineNo">398</span>  public void testCacheDataInL1() {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, 100);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    // Add a data block.  Should go into L2, into the Bucket Cache, not the LruBlockCache.<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    cacheDataBlock(cc, "1");<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    LruBlockCache lrubc = (LruBlockCache)cbc.getBlockCaches()[0];<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    assertDataBlockCount(lrubc, 0);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // Enable our test flag.<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    cc.setCacheDataInL1(true);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    cacheDataBlock(cc, "2");<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    assertDataBlockCount(lrubc, 1);<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    cc.setCacheDataInL1(false);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    cacheDataBlock(cc, "3");<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    assertDataBlockCount(lrubc, 1);<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>  private void assertDataBlockCount(final LruBlockCache bc, final int expected) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>    Map&lt;BlockType, Integer&gt; blocks = bc.getBlockTypeCountsForTest();<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    assertEquals(expected, blocks == null? 0:<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      blocks.get(BlockType.DATA) == null? 0:<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      blocks.get(BlockType.DATA).intValue());<a name="line.421"></a>
-<span class="sourceLineNo">422</span>  }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>}<a name="line.423"></a>
+<span class="sourceLineNo">024</span>import static org.junit.Assert.fail;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.io.IOException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.lang.management.ManagementFactory;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.lang.management.MemoryUsage;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.nio.ByteBuffer;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.Map;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.FileSystem;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.fs.Path;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HConstants;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.testclassification.IOTests;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.hfile.bucket.BucketCache;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.junit.After;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.junit.Before;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.junit.Test;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.junit.experimental.categories.Category;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>/**<a name="line.54"></a>
+<span class="sourceLineNo">055</span> * Tests that {@link CacheConfig} does as expected.<a name="line.55"></a>
+<span class="sourceLineNo">056</span> */<a name="line.56"></a>
+<span class="sourceLineNo">057</span>// This test is marked as a large test though it runs in a short amount of time<a name="line.57"></a>
+<span class="sourceLineNo">058</span>// (seconds).  It is large because it depends on being able to reset the global<a name="line.58"></a>
+<span class="sourceLineNo">059</span>// blockcache instance which is in a global variable.  Experience has it that<a name="line.59"></a>
+<span class="sourceLineNo">060</span>// tests clash on the global variable if this test is run as small sized test.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>@Category({IOTests.class, LargeTests.class})<a name="line.61"></a>
+<span class="sourceLineNo">062</span>public class TestCacheConfig {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private static final Log LOG = LogFactory.getLog(TestCacheConfig.class);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private Configuration conf;<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  static class Deserializer implements CacheableDeserializer&lt;Cacheable&gt; {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    private final Cacheable cacheable;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    private int deserializedIdentifier = 0;<a name="line.68"></a>
+<span class="sourceLineNo">069</span><a name="line.69"></a>
+<span class="sourceLineNo">070</span>    Deserializer(final Cacheable c) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      deserializedIdentifier = CacheableDeserializerIdManager.registerDeserializer(this);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      this.cacheable = c;<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>    @Override<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    public int getDeserialiserIdentifier() {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      return deserializedIdentifier;<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 Cacheable deserialize(ByteBuff b, boolean reuse, MemoryType memType) throws IOException {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      LOG.info("Deserialized " + b + ", reuse=" + reuse);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      return cacheable;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    }<a name="line.84"></a>
+<span class="sourceLineNo">085</span><a name="line.85"></a>
+<span class="sourceLineNo">086</span>    @Override<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    public Cacheable deserialize(ByteBuff b) throws IOException {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      LOG.info("Deserialized " + b);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      return cacheable;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    }<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  };<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  static class IndexCacheEntry extends DataCacheEntry {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    private static IndexCacheEntry SINGLETON = new IndexCacheEntry();<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    public IndexCacheEntry() {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      super(SINGLETON);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    }<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    @Override<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public BlockType getBlockType() {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      return BlockType.ROOT_INDEX;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  }<a name="line.104"></a>
+<span class="sourceLineNo">105</span><a name="line.105"></a>
+<span class="sourceLineNo">106</span>  static class DataCacheEntry implements Cacheable {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    private static final int SIZE = 1;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    private static DataCacheEntry SINGLETON = new DataCacheEntry();<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    final CacheableDeserializer&lt;Cacheable&gt; deserializer;<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>    DataCacheEntry() {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      this(SINGLETON);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>    DataCacheEntry(final Cacheable c) {<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      this.deserializer = new Deserializer(c);<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 String toString() {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>      return "size=" + SIZE + ", type=" + getBlockType();<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 heapSize() {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      return SIZE;<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 int getSerializedLength() {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      return SIZE;<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 void serialize(ByteBuffer destination) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      LOG.info("Serialized " + this + " to " + destination);<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 CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      return this.deserializer;<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    }<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>    @Override<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    public BlockType getBlockType() {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      return BlockType.DATA;<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 MemoryType getMemoryType() {<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      return MemoryType.EXCLUSIVE;<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>  static class MetaCacheEntry extends DataCacheEntry {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    @Override<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public BlockType getBlockType() {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      return BlockType.INTERMEDIATE_INDEX;<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><a name="line.161"></a>
+<span class="sourceLineNo">162</span>  @Before<a name="line.162"></a>
+<span class="sourceLineNo">163</span>  public void setUp() throws Exception {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    CacheConfig.clearGlobalInstances();<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    this.conf = HBaseConfiguration.create();<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>  @After<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public void tearDown() throws Exception {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    // Let go of current block cache.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    CacheConfig.clearGlobalInstances();<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  }<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * @param cc<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   * @param doubling If true, addition of element ups counter by 2, not 1, because element added<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * to onheap and offheap caches.<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @param sizing True if we should run sizing test (doesn't always apply).<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  void basicBlockCacheOps(final CacheConfig cc, final boolean doubling,<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      final boolean sizing) {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.182"></a>
+<span class="sourceLineNo">183</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    BlockCache bc = cc.getBlockCache();<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    BlockCacheKey bck = new BlockCacheKey("f", 0);<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    Cacheable c = new DataCacheEntry();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    // Do asserts on block counting.<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    long initialBlockCount = bc.getBlockCount();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.189"></a>
+<span class="sourceLineNo">190</span>    assertEquals(doubling? 2: 1, bc.getBlockCount() - initialBlockCount);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    bc.evictBlock(bck);<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    assertEquals(initialBlockCount, bc.getBlockCount());<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    // Do size accounting.  Do it after the above 'warm-up' because it looks like some<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    // buffers do lazy allocation so sizes are off on first go around.<a name="line.194"></a>
+<span class="sourceLineNo">195</span>    if (sizing) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      long originalSize = bc.getCurrentSize();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      bc.cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      assertTrue(bc.getCurrentSize() &gt; originalSize);<a name="line.198"></a>
+<span class="sourceLineNo">199</span>      bc.evictBlock(bck);<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      long size = bc.getCurrentSize();<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      assertEquals(originalSize, size);<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    }<a name="line.202"></a>
+<span class="sourceLineNo">203</span>  }<a name="line.203"></a>
+<span class="sourceLineNo">204</span><a name="line.204"></a>
+<span class="sourceLineNo">205</span>  /**<a name="line.205"></a>
+<span class="sourceLineNo">206</span>   * @param cc<a name="line.206"></a>
+<span class="sourceLineNo">207</span>   * @param filename<a name="line.207"></a>
+<span class="sourceLineNo">208</span>   * @return<a name="line.208"></a>
+<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  private long cacheDataBlock(final CacheConfig cc, final String filename) {<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    BlockCacheKey bck = new BlockCacheKey(filename, 0);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    Cacheable c = new DataCacheEntry();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // Do asserts on block counting.<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    cc.getBlockCache().cacheBlock(bck, c, cc.isInMemory(), cc.isCacheDataInL1());<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    return cc.getBlockCache().getBlockCount();<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>  @Test<a name="line.218"></a>
+<span class="sourceLineNo">219</span>  public void testDisableCacheDataBlock() throws IOException {<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    Configuration conf = HBaseConfiguration.create();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    CacheConfig cacheConfig = new CacheConfig(conf);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.228"></a>
+<span class="sourceLineNo">229</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    assertFalse(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertFalse(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, true);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    conf.setBoolean(CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY, true);<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    conf.setBoolean(CacheConfig.CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, true);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    conf.setBoolean(CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY, true);<a name="line.236"></a>
+<span class="sourceLineNo">237</span><a name="line.237"></a>
+<span class="sourceLineNo">238</span>    cacheConfig = new CacheConfig(conf);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    assertTrue(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    assertTrue(cacheConfig.shouldCacheDataCompressed());<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assertTrue(cacheConfig.shouldCacheDataOnWrite());<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    assertTrue(cacheConfig.shouldCacheDataOnRead());<a name="line.243"></a>
+<span class="sourceLineNo">244</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.248"></a>
+<span class="sourceLineNo">249</span><a name="line.249"></a>
+<span class="sourceLineNo">250</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, false);<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.251"></a>
+<span class="sourceLineNo">252</span><a name="line.252"></a>
+<span class="sourceLineNo">253</span>    cacheConfig = new CacheConfig(conf);<a name="line.253"></a>
+<span class="sourceLineNo">254</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.255"></a>
+<span class="sourceLineNo">256</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.256"></a>
+<span class="sourceLineNo">257</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.261"></a>
+<span class="sourceLineNo">262</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<a name="line.263"></a>
+<span class="sourceLineNo">264</span><a name="line.264"></a>
+<span class="sourceLineNo">265</span>    conf.setBoolean(CacheConfig.CACHE_DATA_ON_READ_KEY, true);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    conf.setBoolean(CacheConfig.CACHE_BLOCKS_ON_WRITE_KEY, false);<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>    HColumnDescriptor family = new HColumnDescriptor("testDisableCacheDataBlock");<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    family.setBlockCacheEnabled(false);<a name="line.269"></a>
+<span class="sourceLineNo">270</span><a name="line.270"></a>
+<span class="sourceLineNo">271</span>    cacheConfig = new CacheConfig(conf, family);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.DATA));<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    assertFalse(cacheConfig.shouldCacheCompressed(BlockCategory.DATA));<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    assertFalse(cacheConfig.shouldCacheDataCompressed());<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    assertFalse(cacheConfig.shouldCacheDataOnWrite());<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    assertFalse(cacheConfig.shouldCacheDataOnRead());<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.INDEX));<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    assertFalse(cacheConfig.shouldCacheBlockOnRead(BlockCategory.META));<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    assertTrue(cacheConfig.shouldCacheBlockOnRead(BlockCategory.BLOOM));<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    assertTrue(cacheConfig.shouldCacheBloomsOnWrite());<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    assertTrue(cacheConfig.shouldCacheIndexesOnWrite());<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>  @Test<a name="line.284"></a>
+<span class="sourceLineNo">285</span>  public void testCacheConfigDefaultLRUBlockCache() {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    assertTrue(cc.isBlockCacheEnabled());<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    assertTrue(CacheConfig.DEFAULT_IN_MEMORY == cc.isInMemory());<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    basicBlockCacheOps(cc, false, true);<a name="line.289"></a>
+<span class="sourceLineNo">290</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<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>  /**<a name="line.293"></a>
+<span class="sourceLineNo">294</span>   * Assert that the caches are deployed with CombinedBlockCache and of the appropriate sizes.<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   */<a name="line.295"></a>
+<span class="sourceLineNo">296</span>  @Test<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public void testOffHeapBucketCacheConfig() {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.302"></a>
+<span class="sourceLineNo">303</span>  public void testOnHeapBucketCacheConfig() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "heap");<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    doBucketCacheConfigTest();<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>  @Test<a name="line.308"></a>
+<span class="sourceLineNo">309</span>  public void testFileBucketCacheConfig() throws IOException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    HBaseTestingUtility htu = new HBaseTestingUtility(this.conf);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      Path p = new Path(htu.getDataTestDir(), "bc.txt");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      FileSystem fs = FileSystem.get(this.conf);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      fs.create(p).close();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "file:" + p);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      doBucketCacheConfigTest();<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    } finally {<a name="line.317"></a>
+<span class="sourceLineNo">318</span>      htu.cleanupTestDir();<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>  private void doBucketCacheConfigTest() {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    final int bcSize = 100;<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.324"></a>
+<span class="sourceLineNo">325</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    basicBlockCacheOps(cc, false, false);<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    BlockCache [] bcs = cbc.getBlockCaches();<a name="line.330"></a>
+<span class="sourceLineNo">331</span>    assertTrue(bcs[0] instanceof LruBlockCache);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    LruBlockCache lbc = (LruBlockCache)bcs[0];<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    assertEquals(MemorySizeUtil.getLruCacheSize(this.conf), lbc.getMaxSize());<a name="line.333"></a>
+<span class="sourceLineNo">334</span>    assertTrue(bcs[1] instanceof BucketCache);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    BucketCache bc = (BucketCache)bcs[1];<a name="line.335"></a>
+<span class="sourceLineNo">336</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    assertEquals(bcSize, bc.getMaxSize() / (1024 * 1024));<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * Assert that when BUCKET_CACHE_COMBINED_KEY is false, the non-default, that we deploy<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * LruBlockCache as L1 with a BucketCache for L2.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   */<a name="line.343"></a>
+<span class="sourceLineNo">344</span>  @Test (timeout=10000)<a name="line.344"></a>
+<span class="sourceLineNo">345</span>  public void testBucketCacheConfigL1L2Setup() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.346"></a>
+<span class="sourceLineNo">347</span>    // Make lru size is smaller than bcSize for sure.  Need this to be true so when eviction<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    // from L1 happens, it does not fail because L2 can't take the eviction because block too big.<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    this.conf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 0.001f);<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    MemoryUsage mu = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>    long lruExpectedSize = MemorySizeUtil.getLruCacheSize(this.conf);<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    final int bcSize = 100;<a name="line.352"></a>
+<span class="sourceLineNo">353</span>    long bcExpectedSize = 100 * 1024 * 1024; // MB.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    assertTrue(lruExpectedSize &lt; bcExpectedSize);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, bcSize);<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    this.conf.setBoolean(CacheConfig.BUCKET_CACHE_COMBINED_KEY, false);<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    basicBlockCacheOps(cc, false, false);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    assertTrue(cc.getBlockCache() instanceof LruBlockCache);<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    // TODO: Assert sizes allocated are right and proportions.<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    LruBlockCache lbc = (LruBlockCache)cc.getBlockCache();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    assertEquals(lruExpectedSize, lbc.getMaxSize());<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    BlockCache bc = lbc.getVictimHandler();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    // getMaxSize comes back in bytes but we specified size in MB<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    assertEquals(bcExpectedSize, ((BucketCache) bc).getMaxSize());<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    // Test the L1+L2 deploy works as we'd expect with blocks evicted from L1 going to L2.<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    long initialL1BlockCount = lbc.getBlockCount();<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    long initialL2BlockCount = bc.getBlockCount();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    Cacheable c = new DataCacheEntry();<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    BlockCacheKey bck = new BlockCacheKey("bck", 0);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    lbc.cacheBlock(bck, c, false, false);<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    assertEquals(initialL1BlockCount + 1, lbc.getBlockCount());<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    assertEquals(initialL2BlockCount, bc.getBlockCount());<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // Force evictions by putting in a block too big.<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    final long justTooBigSize = lbc.acceptableSize() + 1;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    lbc.cacheBlock(new BlockCacheKey("bck2", 0), new DataCacheEntry() {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      @Override<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      public long heapSize() {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>        return justTooBigSize;<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 int getSerializedLength() {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        return (int)heapSize();<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>    // The eviction thread in lrublockcache needs to run.<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    while (initialL1BlockCount != lbc.getBlockCount()) Threads.sleep(10);<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    assertEquals(initialL1BlockCount, lbc.getBlockCount());<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    long count = bc.getBlockCount();<a name="line.390"></a>
+<span class="sourceLineNo">391</span>    assertTrue(initialL2BlockCount + 1 &lt;= count);<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>  /**<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * Test the cacheDataInL1 flag.  When set, data blocks should be cached in the l1 tier, up in<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * LruBlockCache when using CombinedBlockCcahe.<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Test<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public void testCacheDataInL1() {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    this.conf.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    this.conf.setInt(HConstants.BUCKET_CACHE_SIZE_KEY, 100);<a name="line.401"></a>
+<span class="sourceLineNo">402</span>    CacheConfig cc = new CacheConfig(this.conf);<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    assertTrue(cc.getBlockCache() instanceof CombinedBlockCache);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    CombinedBlockCache cbc = (CombinedBlockCache)cc.getBlockCache();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    // Add a data block.  Should go into L2, into the Bucket Cache, not the LruBlockCache.<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    cacheDataBlock(cc, "1");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    LruBlockCache lrubc = (LruBlockCache)cbc.getBlockCaches()[0];<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    assertDataBlockCount(lrubc, 0);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // Enable our test flag.<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    cc.setCacheDataInL1(true);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    cacheDataBlock(cc, "2");<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    assertDataBlockCount(lrubc, 1);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    cc.setCacheDataInL1(false);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>    cacheDataBlock(cc, "3");<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    assertDataBlockCount(lrubc, 1);<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>  @Test<a name="line.418"></a>
+<span class="sourceLineNo">419</span>  public void testL2CacheWithInvalidBucketSize() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>    Configuration c = new Configuration(this.conf);<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    c.set(HConstants.BUCKET_CACHE_IOENGINE_KEY, "offheap");<a name="line.421"></a>
+<span class="sourceLineNo">422</span>    c.set(CacheConfig.BUCKET_CACHE_BUCKETS_KEY, "256,512,1024,2048,4000,4096");<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    c.setFloat(HConstants.BUCKET_CACHE_SIZE_KEY, 1024);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    try {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      CacheConfig.getL2(c);<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      fail("Should throw IllegalArgumentException when passing illegal value for bucket size");<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    } catch (IllegalArgumentException e) {<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><a name="line.430"></a>
+<span class="sourceLineNo">431</span>  private void assertDataBlockCount(final LruBlockCache bc, final int expected) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    Map&lt;BlockType, Integer&gt; blocks = bc.getBlockTypeCountsForTest();<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    assertEquals(expected, blocks == null? 0:<a name="line.433"></a>
+<span class="sourceLineNo">434</span>      blocks.get(BlockType.DATA) == null? 0:<a name="line.434"></a>
+<span class="sourceLineNo">435</span>      blocks.get(BlockType.DATA).intValue());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>  }<a name="line.436"></a>
+<span class="sourceLineNo">437</span>}<a name="line.437"></a>
 
 
 


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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 381fc68..ff5a5a8 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20170719214846+00'00')
-/CreationDate (D:20170719214846+00'00')
+/ModDate (D:20170720214839+00'00')
+/CreationDate (D:20170720214839+00'00')
 >>
 endobj
 2 0 obj
@@ -27334,7 +27334,7 @@ endobj
 endobj
 136 0 obj
 << /Limits [(__anchor-top) (adding.new.node)]
-/Names [(__anchor-top) 25 0 R (__indexterm-6954596) 3262 0 R (__indexterm-6956846) 3264 0 R (__indexterm-6958908) 3265 0 R (__indexterm-6960782) 3266 0 R (acid) 891 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3361 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3362 0 R (add.metrics) 3359 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3596 0 R (adding.new.node) 2859 0 R]
+/Names [(__anchor-top) 25 0 R (__indexterm-6954594) 3262 0 R (__indexterm-6956844) 3264 0 R (__indexterm-6958906) 3265 0 R (__indexterm-6960780) 3266 0 R (acid) 891 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3361 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3362 0 R (add.metrics) 3359 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3596 0 R (adding.new.node) 2859 0 R]
 >>
 endobj
 137 0 obj
@@ -46908,7 +46908,7 @@ endobj
 [338 0 R /XYZ 0 152.06 null]
 endobj
 346 0 obj
-<< /Length 8124
+<< /Length 8122
 >>
 stream
 q
@@ -46980,12 +46980,12 @@ ET
 0.2 0.2 0.2 scn
 0.2 0.2 0.2 SCN
 
-1.6501 Tw
+2.0694 Tw
 
 BT
 63.24 701.345 Td
 /F1.0 10.5 Tf
-<7061747465726e732e204d7573742062652061206d756c7469706c65206f66203130323420656c736520796f752077696c6c2072756e20696e746f20276a6176612e696f2e494f457863657074696f6e3a20496e76616c6964204846696c65> Tj
+<7061747465726e732e204d7573742062652061206d756c7469706c65206f662032353620656c736520796f752077696c6c2072756e20696e746f20276a6176612e696f2e494f457863657074696f6e3a20496e76616c6964204846696c65> Tj
 ET
 
 
@@ -755128,4234 +755128,4234 @@ xref
 0000756640 00000 n 
 0000756687 00000 n 
 0000756733 00000 n 
-0000764911 00000 n 
-0000765288 00000 n 
-0000765334 00000 n 
-0000765381 00000 n 
-0000765569 00000 n 
-0000765616 00000 n 
-0000765663 00000 n 
-0000765710 00000 n 
-0000765756 00000 n 
-0000774781 00000 n 
-0000775166 00000 n 
-0000775213 00000 n 
-0000775806 00000 n 
-0000775853 00000 n 
-0000775900 00000 n 
-0000776614 00000 n 
-0000776661 00000 n 
-0000776888 00000 n 
-0000777114 00000 n 
-0000777161 00000 n 
-0000785878 00000 n 
-0000786271 00000 n 
-0000786466 00000 n 
-0000786513 00000 n 
-0000786708 00000 n 
-0000786902 00000 n 
-0000786949 00000 n 
-0000786996 00000 n 
-0000787043 00000 n 
-0000787090 00000 n 
-0000787842 00000 n 
-0000795332 00000 n 
-0000795691 00000 n 
-0000795738 00000 n 
-0000795785 00000 n 
-0000795832 00000 n 
-0000795879 00000 n 
-0000795926 00000 n 
-0000795972 00000 n 
-0000804609 00000 n 
-0000804968 00000 n 
-0000805015 00000 n 
-0000805062 00000 n 
-0000805109 00000 n 
-0000805156 00000 n 
-0000805201 00000 n 
-0000812975 00000 n 
-0000813334 00000 n 
-0000813382 00000 n 
-0000813430 00000 n 
-0000813478 00000 n 
-0000813526 00000 n 
-0000813574 00000 n 
-0000813621 00000 n 
-0000822102 00000 n 
-0000822461 00000 n 
-0000822508 00000 n 
-0000822555 00000 n 
-0000822602 00000 n 
-0000822649 00000 n 
-0000822694 00000 n 
-0000830137 00000 n 
-0000830496 00000 n 
-0000830543 00000 n 
-0000830590 00000 n 
-0000830637 00000 n 
-0000830684 00000 n 
-0000830731 00000 n 
-0000830778 00000 n 
-0000838696 00000 n 
-0000839055 00000 n 
-0000839103 00000 n 
-0000839151 00000 n 
-0000839199 00000 n 
-0000839247 00000 n 
-0000839740 00000 n 
-0000839788 00000 n 
-0000839836 00000 n 
-0000848036 00000 n 
-0000848395 00000 n 
-0000848443 00000 n 
-0000848491 00000 n 
-0000848539 00000 n 
-0000848587 00000 n 
-0000848635 00000 n 
-0000848683 00000 n 
-0000849464 00000 n 
-0000858359 00000 n 
-0000858718 00000 n 
-0000858765 00000 n 
-0000858812 00000 n 
-0000858859 00000 n 
-0000858906 00000 n 
-0000858953 00000 n 
-0000866497 00000 n 
-0000866856 00000 n 
-0000866903 00000 n 
-0000866950 00000 n 
-0000866997 00000 n 
-0000867044 00000 n 
-0000867091 00000 n 
-0000867138 00000 n 
-0000876112 00000 n 
-0000876513 00000 n 
-0000876559 00000 n 
-0000876606 00000 n 
-0000876653 00000 n 
-0000876900 00000 n 
-0000877147 00000 n 
-0000877194 00000 n 
-0000877443 00000 n 
-0000877692 00000 n 
-0000877739 00000 n 
-0000877785 00000 n 
-0000878439 00000 n 
-0000888598 00000 n 
-0000888971 00000 n 
-0000889147 00000 n 
-0000889195 00000 n 
-0000889243 00000 n 
-0000889291 00000 n 
-0000889339 00000 n 
-0000898594 00000 n 
-0000898953 00000 n 
-0000899000 00000 n 
-0000899047 00000 n 
-0000899094 00000 n 
-0000899141 00000 n 
-0000899187 00000 n 
-0000899798 00000 n 
-0000908792 00000 n 
-0000909151 00000 n 
-0000909198 00000 n 
-0000909245 00000 n 
-0000909292 00000 n 
-0000909339 00000 n 
-0000909385 00000 n 
-0000917414 00000 n 
-0000917773 00000 n 
-0000917820 00000 n 
-0000917867 00000 n 
-0000917914 00000 n 
-0000917961 00000 n 
-0000918008 00000 n 
-0000918054 00000 n 
-0000918902 00000 n 
-0000926368 00000 n 
-0000926727 00000 n 
-0000926774 00000 n 
-0000926821 00000 n 
-0000926868 00000 n 
-0000926915 00000 n 
-0000926960 00000 n 
-0000927006 00000 n 
-0000937486 00000 n 
-0000937858 00000 n 
-0000937905 00000 n 
-0000937952 00000 n 
-0000937999 00000 n 
-0000938646 00000 n 
-0000938693 00000 n 
-0000966201 00000 n 
-0000966599 00000 n 
-0000966645 00000 n 
-0000966865 00000 n 
-0000967082 00000 n 
-0000985090 00000 n 
-0000985475 00000 n 
-0000985521 00000 n 
-0000985567 00000 n 
-0000985613 00000 n 
-0000992521 00000 n 
-0000992893 00000 n 
-0000992939 00000 n 
-0000992985 00000 n 
-0000993400 00000 n 
-0001003916 00000 n 
-0001004359 00000 n 
-0001004405 00000 n 
-0001004451 00000 n 
-0001004568 00000 n 
-0001004689 00000 n 
-0001004735 00000 n 
-0001004926 00000 n 
-0001005114 00000 n 
-0001005305 00000 n 
-0001005351 00000 n 
-0001005397 00000 n 
-0001005443 00000 n 
-0001005489 00000 n 
-0001005611 00000 n 
-0001005656 00000 n 
-0001017430 00000 n 
-0001017849 00000 n 
-0001017895 00000 n 
-0001017941 00000 n 
-0001018068 00000 n 
-0001018114 00000 n 
-0001018160 00000 n 
-0001018285 00000 n 
-0001018331 00000 n 
-0001018450 00000 n 
-0001033589 00000 n 
-0001033992 00000 n 
-0001034038 00000 n 
-0001034682 00000 n 
-0001034828 00000 n 
-0001046630 00000 n 
-0001047073 00000 n 
-0001047119 00000 n 
-0001047253 00000 n 
-0001047524 00000 n 
-0001047652 00000 n 
-0001047699 00000 n 
-0001047746 00000 n 
-0001047793 00000 n 
-0001047938 00000 n 
-0001047985 00000 n 
-0001048032 00000 n 
-0001048224 00000 n 
-0001048516 00000 n 
-0001058631 00000 n 
-0001059037 00000 n 
-0001059231 00000 n 
-0001059277 00000 n 
-0001059499 00000 n 
-0001059692 00000 n 
-0001078059 00000 n 
-0001078457 00000 n 
-0001078503 00000 n 
-0001078722 00000 n 
-0001078916 00000 n 
-0001090299 00000 n 
-0001090671 00000 n 
-0001101840 00000 n 
-0001102212 00000 n 
-0001106954 00000 n 
-0001107339 00000 n 
-0001107385 00000 n 
-0001107578 00000 n 
-0001107768 00000 n 
-0001111229 00000 n 
-0001111651 00000 n 
-0001111697 00000 n 
-0001111825 00000 n 
-0001111995 00000 n 
-0001112117 00000 n 
-0001112265 00000 n 
-0001112412 00000 n 
-0001122479 00000 n 
-0001122856 00000 n 
-0001122902 00000 n 
-0001122948 00000 n 
-0001123112 00000 n 
-0001123159 00000 n 
-0001136607 00000 n 
-0001137013 00000 n 
-0001137218 00000 n 
-0001137424 00000 n 
-0001137627 00000 n 
-0001166266 00000 n 
-0001166659 00000 n 
-0001166706 00000 n 
-0001166943 00000 n 
-0001167177 00000 n 
-0001167416 00000 n 
-0001180054 00000 n 
-0001180468 00000 n 
-0001180514 00000 n 
-0001180560 00000 n 
-0001180606 00000 n 
-0001180652 00000 n 
-0001180847 00000 n 
-0001181043 00000 n 
-0001181222 00000 n 
-0001181418 00000 n 
-0001181465 00000 n 
-0001193756 00000 n 
-0001194202 00000 n 
-0001194247 00000 n 
-0001194294 00000 n 
-0001194430 00000 n 
-0001194566 00000 n 
-0001194688 00000 n 
-0001194735 00000 n 
-0001194871 00000 n 
-0001195006 00000 n 
-0001195145 00000 n 
-0001195286 00000 n 
-0001195427 00000 n 
-0001208293 00000 n 
-0001208736 00000 n 
-0001208782 00000 n 
-0001209402 00000 n 
-0001209661 00000 n 
-0001209866 00000 n 
-0001209912 00000 n 
-0001209958 00000 n 
-0001210004 00000 n 
-0001210142 00000 n 
-0001210189 00000 n 
-0001210236 00000 n 
-0001210431 00000 n 
-0001210623 00000 n 
-0001210817 00000 n 
-0001210864 00000 n 
-0001211058 00000 n 
-0001211250 00000 n 
-0001211296 00000 n 
-0001225012 00000 n 
-0001225492 00000 n 
-0001225631 00000 n 
-0001225829 00000 n 
-0001225877 00000 n 
-0001226018 00000 n 
-0001226328 00000 n 
-0001226638 00000 n 
-0001226836 00000 n 
-0001226976 00000 n 
-0001227024 00000 n 
-0001227221 00000 n 
-0001227269 00000 n 
-0001227415 00000 n 
-0001227463 00000 n 
-0001239155 00000 n 
-0001239588 00000 n 
-0001239712 00000 n 
-0001239758 00000 n 
-0001239885 00000 n 
-0001240012 00000 n 
-0001240058 00000 n 
-0001240104 00000 n 
-0001240635 00000 n 
-0001240680 00000 n 
-0001240859 00000 n 
-0001251507 00000 n 
-0001251866 00000 n 
-0001263025 00000 n 
-0001263410 00000 n 
-0001275400 00000 n 
-0001275804 00000 n 
-0001275850 00000 n 
-0001275896 00000 n 
-0001276075 00000 n 
-0001276122 00000 n 
-0001276169 00000 n 
-0001276361 00000 n 
-0001292457 00000 n 
-0001292921 00000 n 
-0001293112 00000 n 
-0001293158 00000 n 
-0001293204 00000 n 
-0001293327 00000 n 
-0001293449 00000 n 
-0001293603 00000 n 
-0001293728 00000 n 
-0001293775 00000 n 
-0001293970 00000 n 
-0001294172 00000 n 
-0001306766 00000 n 
-0001307178 00000 n 
-0001307303 00000 n 
-0001307432 00000 n 
-0001307603 00000 n 
-0001307726 00000 n 
-0001307927 00000 n 
-0001308075 00000 n 
-0001308267 00000 n 
-0001320886 00000 n 
-0001321337 00000 n 
-0001321527 00000 n 
-0001321652 00000 n 
-0001321846 00000 n 
-0001322039 00000 n 
-0001322086 00000 n 
-0001322231 00000 n 
-0001322425 00000 n 
-0001322617 00000 n 
-0001327475 00000 n 
-0001327868 00000 n 
-0001327914 00000 n 
-0001328074 00000 n 
-0001328202 00000 n 
-0001328410 00000 n 
-0001330587 00000 n 
-0001330959 00000 n 
-0001331005 00000 n 
-0001334202 00000 n 
-0001334579 00000 n 
-0001334625 00000 n 
-0001334819 00000 n 
-0001344545 00000 n 
-0001344948 00000 n 
-0001344994 00000 n 
-0001345577 00000 n 
-0001345718 00000 n 
-0001354121 00000 n 
-0001354493 00000 n 
-0001354540 00000 n 
-0001358529 00000 n 
-0001358901 00000 n 
-0001358947 00000 n 
-0001366522 00000 n 
-0001366881 00000 n 
-0001370975 00000 n 
-0001371347 00000 n 
-0001371393 00000 n 
-0001379452 00000 n 
-0001379825 00000 n 
-0001379871 00000 n 
-0001379917 00000 n 
-0001390025 00000 n 
-0001390385 00000 n 
-0001400102 00000 n 
-0001400506 00000 n 
-0001400552 00000 n 
-0001400598 00000 n 
-0001400817 00000 n 
-0001417070 00000 n 
-0001417429 00000 n 
-0001417475 00000 n 
-0001417521 00000 n 
-0001473224 00000 n 
-0001473596 00000 n 
-0001473642 00000 n 
-0001473688 00000 n 
-0001473734 00000 n 
-0001478368 00000 n 
-0001478727 00000 n 
-0001478773 00000 n 
-0001478819 00000 n 
-0001479435 00000 n 
-0001489626 00000 n 
-0001489998 00000 n 
-0001490044 00000 n 
-0001519344 00000 n 
-0001519763 00000 n 
-0001519809 00000 n 
-0001520023 00000 n 
-0001520274 00000 n 
-0001520468 00000 n 
-0001550597 00000 n 
-0001550943 00000 n 
-0001569669 00000 n 
-0001570059 00000 n 
-0001570105 00000 n 
-0001570235 00000 n 
-0001582182 00000 n 
-0001582588 00000 n 
-0001582634 00000 n 
-0001583189 00000 n 
-0001583383 00000 n 
-0001583575 00000 n 
-0001583768 00000 n 
-0001583814 00000 n 
-0001583861 00000 n 
-0001586171 00000 n 
-0001586530 00000 n 
-0001587180 00000 n 
-0001587526 00000 n 
-0001587572 00000 n 
-0001588809 00000 n 
-0001589155 00000 n 
-0001589201 00000 n 
-0001594690 00000 n 
-0001595062 00000 n 
-0001595108 00000 n 
-0001596313 00000 n 
-0001596685 00000 n 
-0001596731 00000 n 
-0001621390 00000 n 
-0001621823 00000 n 
-0001621869 00000 n 
-0001622084 00000 n 
-0001622130 00000 n 
-0001622340 00000 n 
-0001622600 00000 n 
-0001622646 00000 n 
-0001622858 00000 n 
-0001623118 00000 n 
-0001623387 00000 n 
-0001623433 00000 n 
-0001623645 00000 n 
-0001623875 00000 n 
-0001626705 00000 n 
-0001627106 00000 n 
-0001627152 00000 n 
-0001627367 00000 n 
-0001627633 00000 n 
-0001627762 00000 n 
-0001627888 00000 n 
-0001641699 00000 n 
-0001642133 00000 n 
-0001642179 00000 n 
-0001642372 00000 n 
-0001642557 00000 n 
-0001642603 00000 n 
-0001643406 00000 n 
-0001643632 00000 n 
-0001643811 00000 n 
-0001666657 00000 n 
-0001667115 00000 n 
-0001667338 00000 n 
-0001667476 00000 n 
-0001667523 00000 n 
-0001667570 00000 n 
-0001667789 00000 n 
-0001668008 00000 n 
-0001668246 00000 n 
-0001668493 00000 n 
-0001668540 00000 n 
-0001710705 00000 n 
-0001711064 00000 n 
-0001711110 00000 n 
-0001711156 00000 n 
-0001711202 00000 n 
-0001711248 00000 n 
-0001725861 00000 n 
-0001726325 00000 n 
-0001726371 00000 n 
-0001726580 00000 n 
-0001726788 00000 n 
-0001726995 00000 n 
-0001727117 00000 n 
-0001727248 00000 n 
-0001727443 00000 n 
-0001727488 00000 n 
-0001727534 00000 n 
-0001727725 00000 n 
-0001732619 00000 n 
-0001733009 00000 n 
-0001733054 00000 n 
-0001733240 00000 n 
-0001734510 00000 n 
-0001734856 00000 n 
-0001734902 00000 n 
-0001737372 00000 n 
-0001737736 00000 n 
-0001737782 00000 n 
-0001737906 00000 n 
-0001741551 00000 n 
-0001741897 00000 n 
-0001741943 00000 n 
-0001743127 00000 n 
-0001743499 00000 n 
-0001743545 00000 n 
-0001743709 00000 n 
-0001743914 00000 n 
-0001749632 00000 n 
-0001750049 00000 n 
-0001750095 00000 n 
-0001750306 00000 n 
-0001750516 00000 n 
-0001750639 00000 n 
-0001750772 00000 n 
-0001750970 00000 n 
-0001751187 00000 n 
-0001767242 00000 n 
-0001767656 00000 n 
-0001767702 00000 n 
-0001767823 00000 n 
-0001768042 00000 n 
-0001768174 00000 n 
-0001768220 00000 n 
-0001768337 00000 n 
-0001775789 00000 n 
-0001776153 00000 n 
-0001776199 00000 n 
-0001776323 00000 n 
-0001779266 00000 n 
-0001779630 00000 n 
-0001779676 00000 n 
-0001779900 00000 n 
-0001785294 00000 n 
-0001785658 00000 n 
-0001785704 00000 n 
-0001785830 00000 n 
-0001785876 00000 n 
-0001793331 00000 n 
-0001793690 00000 n 
-0001793736 00000 n 
-0001793782 00000 n 
-0001805218 00000 n 
-0001805577 00000 n 
-0001820852 00000 n 
-0001821322 00000 n 
-0001821583 00000 n 
-0001821844 00000 n 
-0001822028 00000 n 
-0001822225 00000 n 
-0001822272 00000 n 
-0001822460 00000 n 
-0001822700 00000 n 
-0001822868 00000 n 
-0001823047 00000 n 
-0001823181 00000 n 
-0001823228 00000 n 
-0001823532 00000 n 
-0001823651 00000 n 
-0001832416 00000 n 
-0001832825 00000 n 
-0001832942 00000 n 
-0001833191 00000 n 
-0001833313 00000 n 
-0001833359 00000 n 
-0001833481 00000 n 
-0001833526 00000 n 
-0001833648 00000 n 
-0001833694 00000 n 
-0001833740 00000 n 
-0001872427 00000 n 
-0001872846 00000 n 
-0001872892 00000 n 
-0001873086 00000 n 
-0001873325 00000 n 
-0001873564 00000 n 
-0001886140 00000 n 
-0001886530 00000 n 
-0001886661 00000 n 
-0001886707 00000 n 
-0001886753 00000 n 
-0001886798 00000 n 
-0001928534 00000 n 
-0001928911 00000 n 
-0001929081 00000 n 
-0001936092 00000 n 
-0001936485 00000 n 
-0001936531 00000 n 
-0001936577 00000 n 
-0001936798 00000 n 
-0001936921 00000 n 
-0001936967 00000 n 
-0001937191 00000 n 
-0001942103 00000 n 
-0001942504 00000 n 
-0001942550 00000 n 
-0001942767 00000 n 
-0001942987 00000 n 
-0001943112 00000 n 
-0001943158 00000 n 
-0001943432 00000 n 
-0001944388 00000 n 
-0001944752 00000 n 
-0001944798 00000 n 
-0001944917 00000 n 
-0001950936 00000 n 
-0001951334 00000 n 
-0001951380 00000 n 
-0001951978 00000 n 
-0001952200 00000 n 
-0001952395 00000 n 
-0001962709 00000 n 
-0001963137 00000 n 
-0001963183 00000 n 
-0001963401 00000 n 
-0001963620 00000 n 
-0002023262 00000 n 
-0002023610 00000 n 
-0002083650 00000 n 
-0002083998 00000 n 
-0002095616 00000 n 
-0002095977 00000 n 
-0002106885 00000 n 
-0002107301 00000 n 
-0002107349 00000 n 
-0002107476 00000 n 
-0002107696 00000 n 
-0002107916 00000 n 
-0002107964 00000 n 
-0002108093 00000 n 
-0002108141 00000 n 
-0002108630 00000 n 
-0002108769 00000 n 
-0002112538 00000 n 
-0002112923 00000 n 
-0002112971 00000 n 
-0002113111 00000 n 
-0002113159 00000 n 
-0002113298 00000 n 
-0002113346 00000 n 
-0002113460 00000 n 
-0002116045 00000 n 
-0002116412 00000 n 
-0002116460 00000 n 
-0002116689 00000 n 
-0002127403 00000 n 
-0002127792 00000 n 
-0002127840 00000 n 
-0002127962 00000 n 
-0002128010 00000 n 
-0002128058 00000 n 
-0002128184 00000 n 
-0002142146 00000 n 
-0002142584 00000 n 
-0002142632 00000 n 
-0002142680 00000 n 
-0002142875 00000 n 
-0002143116 00000 n 
-0002143358 00000 n 
-0002143407 00000 n 
-0002153628 00000 n 
-0002154035 00000 n 
-0002154312 00000 n 
-0002154360 00000 n 
-0002154534 00000 n 
-0002154708 00000 n 
-0002154979 00000 n 
-0002155027 00000 n 
-0002164837 00000 n 
-0002165230 00000 n 
-0002165379 00000 n 
-0002165427 00000 n 
-0002174642 00000 n 
-0002175022 00000 n 
-0002175070 00000 n 
-0002175118 00000 n 
-0002175870 00000 n 
-0002176015 00000 n 
-0002186532 00000 n 
-0002186912 00000 n 
-0002186960 00000 n 
-0002187104 00000 n 
-0002187152 00000 n 
-0002197356 00000 n 
-0002197723 00000 n 
-0002197771 00000 n 
-0002197915 00000 n 
-0002197963 00000 n 
-0002198011 00000 n 
-0002198059 00000 n 
-0002198107 00000 n 
-0002218580 00000 n 
-0002218973 00000 n 
-0002219121 00000 n 
-0002219169 00000 n 
-0002219986 00000 n 
-0002233563 00000 n 
-0002233961 00000 n 
-0002234155 00000 n 
-0002234340 00000 n 
-0002234524 00000 n 
-0002236686 00000 n 
-0002237021 00000 n 
-0002251442 00000 n 
-0002251816 00000 n 
-0002251864 00000 n 
-0002251912 00000 n 
-0002251960 00000 n 
-0002252008 00000 n 
-0002266575 00000 n 
-0002266949 00000 n 
-0002266997 00000 n 
-0002267045 00000 n 
-0002267093 00000 n 
-0002267141 00000 n 
-0002268502 00000 n 
-0002268850 00000 n 
-0002279949 00000 n 
-0002280356 00000 n 
-0002280404 00000 n 
-0002280452 00000 n 
-0002280500 00000 n 
-0002280548 00000 n 
-0002280675 00000 n 
-0002288015 00000 n 
-0002288466 00000 n 
-0002288514 00000 n 
-0002288926 00000 n 
-0002289097 00000 n 
-0002289353 00000 n 
-0002289606 00000 n 
-0002289817 00000 n 
-0002289943 00000 n 
-0002290115 00000 n 
-0002305614 00000 n 
-0002306007 00000 n 
-0002306055 00000 n 
-0002306283 00000 n 
-0002311575 00000 n 
-0002311949 00000 n 
-0002323224 00000 n 
-0002323600 00000 n 
-0002323794 00000 n 
-0002323932 00000 n 
-0002330655 00000 n 
-0002331022 00000 n 
-0002331218 00000 n 
-0002338797 00000 n 
-0002339199 00000 n 
-0002339247 00000 n 
-0002339442 00000 n 
-0002339662 00000 n 
-0002344509 00000 n 
-0002344870 00000 n 
-0002344918 00000 n 
-0002355984 00000 n 
-0002356436 00000 n 
-0002356484 00000 n 
-0002356717 00000 n 
-0002356951 00000 n 
-0002357188 00000 n 
-0002357417 00000 n 
-0002357646 00000 n 
-0002357880 00000 n 
-0002358118 00000 n 
-0002358339 00000 n 
-0002358574 00000 n 
-0002360367 00000 n 
-0002360734 00000 n 
-0002360782 00000 n 
-0002360913 00000 n 
-0002364895 00000 n 
-0002365293 00000 n 
-0002365341 00000 n 
-0002365569 00000 n 
-0002365709 00000 n 
-0002365847 00000 n 
-0002368909 00000 n 
-0002369298 00000 n 
-0002369346 00000 n 
-0002369394 00000 n 
-0002369627 00000 n 
-0002369675 00000 n 
-0002369910 00000 n 
-0002397921 00000 n 
-0002398301 00000 n 
-0002398349 00000 n 
-0002398397 00000 n 
-0002398624 00000 n 
-0002423968 00000 n 
-0002424348 00000 n 
-0002424396 00000 n 
-0002424628 00000 n 
-0002446058 00000 n 
-0002446419 00000 n 
-0002446467 00000 n 
-0002446515 00000 n 
-0002489707 00000 n 
-0002490055 00000 n 
-0002514006 00000 n 
-0002514367 00000 n 
-0002514415 00000 n 
-0002552012 00000 n 
-0002552373 00000 n 
-0002552421 00000 n 
-0002571992 00000 n 
-0002572353 00000 n 
-0002572401 00000 n 
-0002585503 00000 n 
-0002585864 00000 n 
-0002585912 00000 n 
-0002586370 00000 n 
-0002588451 00000 n 
-0002588818 00000 n 
-0002588866 00000 n 
-0002588986 00000 n 
-0002626278 00000 n 
-0002626658 00000 n 
-0002626706 00000 n 
-0002626874 00000 n 
-0002631623 00000 n 
-0002632025 00000 n 
-0002632073 00000 n 
-0002632247 00000 n 
-0002632423 00000 n 
-0002640696 00000 n 
-0002641102 00000 n 
-0002641150 00000 n 
-0002641379 00000 n 
-0002649070 00000 n 
-0002649444 00000 n 
-0002649492 00000 n 
-0002660326 00000 n 
-0002660674 00000 n 
-0002672707 00000 n 
-0002673114 00000 n 
-0002673162 00000 n 
-0002673414 00000 n 
-0002673664 00000 n 
-0002673712 00000 n 
-0002673760 00000 n 
-0002674221 00000 n 
-0002674385 00000 n 
-0002674524 00000 n 
-0002674572 00000 n 
-0002674708 00000 n 
-0002694717 00000 n 
-0002695078 00000 n 
-0002695126 00000 n 
-0002711290 00000 n 
-0002711738 00000 n 
-0002711917 00000 n 
-0002712065 00000 n 
-0002712113 00000 n 
-0002712248 00000 n 
-0002712444 00000 n 
-0002712640 00000 n 
-0002728277 00000 n 
-0002728742 00000 n 
-0002728878 00000 n 
-0002729013 00000 n 
-0002729148 00000 n 
-0002729283 00000 n 
-0002729331 00000 n 
-0002729468 00000 n 
-0002729664 00000 n 
-0002745800 00000 n 
-0002746226 00000 n 
-0002746496 00000 n 
-0002746544 00000 n 
-0002746692 00000 n 
-0002746897 00000 n 
-0002761120 00000 n 
-0002761513 00000 n 
-0002761715 00000 n 
-0002761763 00000 n 
-0002773509 00000 n 
-0002773870 00000 n 
-0002779523 00000 n 
-0002779930 00000 n 
-0002779978 00000 n 
-0002780230 00000 n 
-0002780480 00000 n 
-0002780528 00000 n 
-0002780667 00000 n 
-0002780807 00000 n 
-0002780855 00000 n 
-0002780903 00000 n 
-0002795690 00000 n 
-0002796051 00000 n 
-0002796099 00000 n 
-0002811423 00000 n 
-0002811812 00000 n 
-0002811860 00000 n 
-0002812009 00000 n 
-0002812057 00000 n 
-0002812205 00000 n 
-0002825229 00000 n 
-0002825627 00000 n 
-0002825675 00000 n 
-0002825723 00000 n 
-0002825969 00000 n 
-0002826095 00000 n 
-0002826221 00000 n 
-0002826269 00000 n 
-0002829755 00000 n 
-0002830136 00000 n 
-0002830274 00000 n 
-0002843655 00000 n 
-0002844079 00000 n 
-0002844127 00000 n 
-0002844250 00000 n 
-0002844299 00000 n 
-0002844436 00000 n 
-0002844566 00000 n 
-0002856171 00000 n 
-0002856577 00000 n 
-0002856625 00000 n 
-0002857245 00000 n 
-0002857293 00000 n 
-0002857431 00000 n 
-0002857479 00000 n 
-0002857527 00000 n 
-0002857575 00000 n 
-0002873802 00000 n 
-0002874163 00000 n 
-0002896269 00000 n 
-0002896656 00000 n 
-0002909822 00000 n 
-0002910251 00000 n 
-0002910389 00000 n 
-0002910438 00000 n 
-0002910567 00000 n 
-0002910616 00000 n 
-0002911409 00000 n 
-0002911558 00000 n 
-0002911697 00000 n 
-0002911837 00000 n 
-0002920785 00000 n 
-0002921146 00000 n 
-0002936798 00000 n 
-0002937146 00000 n 
-0002951413 00000 n 
-0002951800 00000 n 
-0002951848 00000 n 
-0002963339 00000 n 
-0002963726 00000 n 
-0002968795 00000 n 
-0002969169 00000 n 
-0003005653 00000 n 
-0003006028 00000 n 
-0003038413 00000 n 
-0003038787 00000 n 
-0003072407 00000 n 
-0003072781 00000 n 
-0003072830 00000 n 
-0003088989 00000 n 
-0003089418 00000 n 
-0003089613 00000 n 
-0003089808 00000 n 
-0003102902 00000 n 
-0003103308 00000 n 
-0003103356 00000 n 
-0003103503 00000 n 
-0003103551 00000 n 
-0003128164 00000 n 
-0003128525 00000 n 
-0003158450 00000 n 
-0003158811 00000 n 
-0003164837 00000 n 
-0003165211 00000 n 
-0003198124 00000 n 
-0003198526 00000 n 
-0003198575 00000 n 
-0003198896 00000 n 
-0003199199 00000 n 
-0003232609 00000 n 
-0003233020 00000 n 
-0003233069 00000 n 
-0003233267 00000 n 
-0003233409 00000 n 
-0003233548 00000 n 
-0003233597 00000 n 
-0003248046 00000 n 
-0003248439 00000 n 
-0003248632 00000 n 
-0003248679 00000 n 
-0003248726 00000 n 
-0003263049 00000 n 
-0003263423 00000 n 
-0003263471 00000 n 
-0003276789 00000 n 
-0003277163 00000 n 
-0003289962 00000 n 
-0003290349 00000 n 
-0003290397 00000 n 
-0003302110 00000 n 
-0003302517 00000 n 
-0003302565 00000 n 
-0003302814 00000 n 
-0003307089 00000 n 
-0003307437 00000 n 
-0003323074 00000 n 
-0003323448 00000 n 
-0003323496 00000 n 
-0003339264 00000 n 
-0003339612 00000 n 
-0003354962 00000 n 
-0003355323 00000 n 
-0003355719 00000 n 
-0003356067 00000 n 
-0003356115 00000 n 
-0003367403 00000 n 
-0003367751 00000 n 
-0003367799 00000 n 
-0003367847 00000 n 
-0003367895 00000 n 
-0003372877 00000 n 
-0003373253 00000 n 
-0003373301 00000 n 
-0003373474 00000 n 
-0003373599 00000 n 
-0003388949 00000 n 
-0003389364 00000 n 
-0003389412 00000 n 
-0003389824 00000 n 
-0003389872 00000 n 
-0003390092 00000 n 
-0003390141 00000 n 
-0003390361 00000 n 
-0003393136 00000 n 
-0003393525 00000 n 
-0003393778 00000 n 
-0003393826 00000 n 
-0003393966 00000 n 
-0003413726 00000 n 
-0003414182 00000 n 
-0003414230 00000 n 
-0003414364 00000 n 
-0003414494 00000 n 
-0003414713 00000 n 
-0003414761 00000 n 
-0003414894 00000 n 
-0003415027 00000 n 
-0003415075 00000 n 
-0003415305 00000 n 
-0003415353 00000 n 
-0003415571 00000 n 
-0003415792 00000 n 
-0003441346 00000 n 
-0003441806 00000 n 
-0003442034 00000 n 
-0003442082 00000 n 
-0003442279 00000 n 
-0003442506 00000 n 
-0003442555 00000 n 
-0003442780 00000 n 
-0003443002 00000 n 
-0003443171 00000 n 
-0003443419 00000 n 
-0003443468 00000 n 
-0003462518 00000 n 
-0003462879 00000 n 
-0003462927 00000 n 
-0003468543 00000 n 
-0003468923 00000 n 
-0003468971 00000 n 
-0003469097 00000 n 
-0003488517 00000 n 
-0003488942 00000 n 
-0003488990 00000 n 
-0003489389 00000 n 
-0003489601 00000 n 
-0003489819 00000 n 
-0003490040 00000 n 
-0003490088 00000 n 
-0003490136 00000 n 
-0003490357 00000 n 
-0003490405 00000 n 
-0003490453 00000 n 
-0003490688 00000 n 
-0003490923 00000 n 
-0003512362 00000 n 
-0003512769 00000 n 
-0003512817 00000 n 
-0003512954 00000 n 
-0003513002 00000 n 
-0003513235 00000 n 
-0003513454 00000 n 
-0003513502 00000 n 
-0003513733 00000 n 
-0003519455 00000 n 
-0003519858 00000 n 
-0003519906 00000 n 
-0003520141 00000 n 
-0003520189 00000 n 
-0003520417 00000 n 
-0003520465 00000 n 
-0003520889 00000 n 
-0003520937 00000 n 
-0003521160 00000 n 
-0003521208 00000 n 
-0003521435 00000 n 
-0003521483 00000 n 
-0003521712 00000 n 
-0003569178 00000 n 
-0003569567 00000 n 
-0003569615 00000 n 
-0003569853 00000 n 
-0003569901 00000 n 
-0003570128 00000 n 
-0003598133 00000 n 
-0003598522 00000 n 
-0003598570 00000 n 
-0003598618 00000 n 
-0003598838 00000 n 
-0003598886 00000 n 
-0003598934 00000 n 
-0003599167 00000 n 
-0003610482 00000 n 
-0003610898 00000 n 
-0003610946 00000 n 
-0003611075 00000 n 
-0003611276 00000 n 
-0003611324 00000 n 
-0003611372 00000 n 
-0003611500 00000 n 
-0003611548 00000 n 
-0003611596 00000 n 
-0003611644 00000 n 
-0003611776 00000 n 
-0003611913 00000 n 
-0003611961 00000 n 
-0003620800 00000 n 
-0003621189 00000 n 
-0003621237 00000 n 
-0003621365 00000 n 
-0003621413 00000 n 
-0003621461 00000 n 
-0003621901 00000 n 
-0003621949 00000 n 
-0003621997 00000 n 
-0003622045 00000 n 
-0003622093 00000 n 
-0003622141 00000 n 
-0003622349 00000 n 
-0003622397 00000 n 
-0003637092 00000 n 
-0003637565 00000 n 
-0003637614 00000 n 
-0003637803 00000 n 
-0003637987 00000 n 
-0003638122 00000 n 
-0003638171 00000 n 
-0003638402 00000 n 
-0003638631 00000 n 
-0003638768 00000 n 
-0003638965 00000 n 
-0003639014 00000 n 
-0003658483 00000 n 
-0003658886 00000 n 
-0003658934 00000 n 
-0003659123 00000 n 
-0003659310 00000 n 
-0003673927 00000 n 
-0003674361 00000 n 
-0003674495 00000 n 
-0003674618 00000 n 
-0003674746 00000 n 
-0003674872 00000 n 
-0003674920 00000 n 
-0003696501 00000 n 
-0003696934 00000 n 
-0003697127 00000 n 
-0003697319 00000 n 
-0003697367 00000 n 
-0003697933 00000 n 
-0003697980 00000 n 
-0003698218 00000 n 
-0003698450 00000 n 
-0003698498 00000 n 
-0003699175 00000 n 
-0003711834 00000 n 
-0003712223 00000 n 
-0003712352 00000 n 
-0003712545 00000 n 
-0003712592 00000 n 
-0003712951 00000 n 
-0003729146 00000 n 
-0003729574 00000 n 
-0003729804 00000 n 
-0003729853 00000 n 
-0003730355 00000 n 
-0003730548 00000 n 
-0003744226 00000 n 
-0003744637 00000 n 
-0003744685 00000 n 
-0003744807 00000 n 
-0003745030 00000 n 
-0003745179 00000 n 
-0004010267 00000 n 
-0004012197 00000 n 
-0004020885 00000 n 
-0004021272 00000 n 
-0004021320 00000 n 
-0004039692 00000 n 
-0004040134 00000 n 
-0004040182 00000 n 
-0004040230 00000 n 
-0004040447 00000 n 
-0004040573 00000 n 
-0004040695 00000 n 
-0004040888 00000 n 
-0004041079 00000 n 
-0004052797 00000 n 
-0004053190 00000 n 
-0004053238 00000 n 
-0004053432 00000 n 
-0004053481 00000 n 
-0004053530 00000 n 
-0004053903 00000 n 
-0004066133 00000 n 
-0004066507 00000 n 
-0004066555 00000 n 
-0004067113 00000 n 
-0004082821 00000 n 
-0004083268 00000 n 
-0004083460 00000 n 
-0004083652 00000 n 
-0004083700 00000 n 
-0004083895 00000 n 
-0004083943 00000 n 
-0004084083 00000 n 
-0004084222 00000 n 
-0004084270 00000 n 
-0004084319 00000 n 
-0004084462 00000 n 
-0004084604 00000 n 
-0004095323 00000 n 
-0004095684 00000 n 
-0004108495 00000 n 
-0004108933 00000 n 
-0004109087 00000 n 
-0004109240 00000 n 
-0004109393 00000 n 
-0004109445 00000 n 
-0004125160 00000 n 
-0004125584 00000 n 
-0004125632 00000 n 
-0004125773 00000 n 
-0004125970 00000 n 
-0004126163 00000 n 
-0004129600 00000 n 
-0004129974 00000 n 
-0004130022 00000 n 
-0004141858 00000 n 
-0004142269 00000 n 
-0004142317 00000 n 
-0004142461 00000 n 
-0004142602 00000 n 
-0004142650 00000 n 
-0004142698 00000 n 
-0004142836 00000 n 
-0004155757 00000 n 
-0004156146 00000 n 
-0004156281 00000 n 
-0004156329 00000 n 
-0004156377 00000 n 
-0004156424 00000 n 
-0004156472 00000 n 
-0004157077 00000 n 
-0004157222 00000 n 
-0004165885 00000 n 
-0004166259 00000 n 
-0004166307 00000 n 
-0004261511 00000 n 
-0004267389 00000 n 
-0004267763 00000 n 
-0004290351 00000 n 
-0004290699 00000 n 
-0004302753 00000 n 
-0004303200 00000 n 
-0004303247 00000 n 
-0004303478 00000 n 
-0004303707 00000 n 
-0004303919 00000 n 
-0004303966 00000 n 
-0004304181 00000 n 
-0004304313 00000 n 
-0004304361 00000 n 
-0004304684 00000 n 
-0004304925 00000 n 
-0004305185 00000 n 
-0004330801 00000 n 
-0004331225 00000 n 
-0004331274 00000 n 
-0004331401 00000 n 
-0004331527 00000 n 
-0004331659 00000 n 
-0004344894 00000 n 
-0004345327 00000 n 
-0004345457 00000 n 
-0004345505 00000 n 
-0004345752 00000 n 
-0004345997 00000 n 
-0004346244 00000 n 
-0004346292 00000 n 
-0004359379 00000 n 
-0004359740 00000 n 
-0004359788 00000 n 
-0004359836 00000 n 
-0004359884 00000 n 
-0004359931 00000 n 
-0004360423 00000 n 
-0004372756 00000 n 
-0004373203 00000 n 
-0004373251 00000 n 
-0004373298 00000 n 
-0004373493 00000 n 
-0004373730 00000 n 
-0004373950 00000 n 
-0004374158 00000 n 
-0004374280 00000 n 
-0004374401 00000 n 
-0004374449 00000 n 
-0004374497 00000 n 
-0004374640 00000 n 
-0004374688 00000 n 
-0004384777 00000 n 
-0004385184 00000 n 
-0004385308 00000 n 
-0004385355 00000 n 
-0004385402 00000 n 
-0004402599 00000 n 
-0004403042 00000 n 
-0004403090 00000 n 
-0004403285 00000 n 
-0004403426 00000 n 
-0004403568 00000 n 
-0004403706 00000 n 
-0004403846 00000 n 
-0004403894 00000 n 
-0004417939 00000 n 
-0004418372 00000 n 
-0004418422 00000 n 
-0004418581 00000 n 
-0004418721 00000 n 
-0004418858 00000 n 
-0004418908 00000 n 
-0004419107 00000 n 
-0004433057 00000 n 
-0004433459 00000 n 
-0004433507 00000 n 
-0004433555 00000 n 
-0004433680 00000 n 
-0004433803 00000 n 
-0004449849 00000 n 
-0004450282 00000 n 
-0004450421 00000 n 
-0004450560 00000 n 
-0004450608 00000 n 
-0004450747 00000 n 
-0004450889 00000 n 
-0004467141 00000 n 
-0004467547 00000 n 
-0004467594 00000 n 
-0004467723 00000 n 
-0004481713 00000 n 
-0004482093 00000 n 
-0004482214 00000 n 
-0004495616 00000 n 
-0004495977 00000 n 
-0004508470 00000 n 
-0004508899 00000 n 
-0004508947 00000 n 
-0004509113 00000 n 
-0004509240 00000 n 
-0004509289 00000 n 
-0004521420 00000 n 
-0004521794 00000 n 
-0004521842 00000 n 
-0004522317 00000 n 
-0004522520 00000 n 
-0004522568 00000 n 
-0004533696 00000 n 
-0004534115 00000 n 
-0004534163 00000 n 
-0004534301 00000 n 
-0004534350 00000 n 
-0004534399 00000 n 
-0004571393 00000 n 
-0004571800 00000 n 
-0004571848 00000 n 
-0004571988 00000 n 
-0004592354 00000 n 
-0004592769 00000 n 
-0004592817 00000 n 
-0004592865 00000 n 
-0004592915 00000 n 
-0004593142 00000 n 
-0004593370 00000 n 
-0004593420 00000 n 
-0004618013 00000 n 
-0004618406 00000 n 
-0004618533 00000 n 
-0004618580 00000 n 
-0004618629 00000 n 
-0004633904 00000 n 
-0004634297 00000 n 
-0004634430 00000 n 
-0004634479 00000 n 
-0004634902 00000 n 
-0004634951 00000 n 
-0004650075 00000 n 
-0004650468 00000 n 
-0004650518 00000 n 
-0004650568 00000 n 
-0004650707 00000 n 
-0004652907 00000 n 
-0004653255 00000 n 
-0004665397 00000 n 
-0004665758 00000 n 
-0004665806 00000 n 
-0004665854 00000 n 
-0004665902 00000 n 
-0004665950 00000 n 
-0004665998 00000 n 
-0004666046 00000 n 
-0004666547 00000 n 
-0004675275 00000 n 
-0004675686 00000 n 
-0004675734 00000 n 
-0004675860 00000 n 
-0004675993 00000 n 
-0004676214 00000 n 
-0004676262 00000 n 
-0004679185 00000 n 
-0004679552 00000 n 
-0004679600 00000 n 
-0004679829 00000 n 
-0004679877 00000 n 
-0004679925 00000 n 
-0004691681 00000 n 
-0004692055 00000 n 
-0004692103 00000 n 
-0004692151 00000 n 
-0004692199 00000 n 
-0004702394 00000 n 
-0004702742 00000 n 
-0004765341 00000 n 
-0004767104 00000 n 
-0004772692 00000 n 
-0004773066 00000 n 
-0004773115 00000 n 
-0004784052 00000 n 
-0004784426 00000 n 
-0004784475 00000 n 
-0004784524 00000 n 
-0004784573 00000 n 
-0004799402 00000 n 
-0004799763 00000 n 
-0004799811 00000 n 
-0004799859 00000 n 
-0004799907 00000 n 
-0004812719 00000 n 
-0004813080 00000 n 
-0004813128 00000 n 
-0004813650 00000 n 
-0004813698 00000 n 
-0004813746 00000 n 
-0004813794 00000 n 
-0004829961 00000 n 
-0004830309 00000 n 
-0004845360 00000 n 
-0004845722 00000 n 
-0004862507 00000 n 
-0004862882 00000 n 
-0004862930 00000 n 
-0004884914 00000 n 
-0004885289 00000 n 
-0004885337 00000 n 
-0004885384 00000 n 
-0004885432 00000 n 
-0004885480 00000 n 
-0004885528 00000 n 
-0004885576 00000 n 
-0004909470 00000 n 
-0004909831 00000 n 
-0004909879 00000 n 
-0004915738 00000 n 
-0004916145 00000 n 
-0004916193 00000 n 
-0004916386 00000 n 
-0004916578 00000 n 
-0004916762 00000 n 
-0004916985 00000 n 
-0004934259 00000 n 
-0004934693 00000 n 
-0004934741 00000 n 
-0004934861 00000 n 
-0004935057 00000 n 
-0004935179 00000 n 
-0004935313 00000 n 
-0004935361 00000 n 
-0004935410 00000 n 
-0004936020 00000 n 
-0004941954 00000 n 
-0004942329 00000 n 
-0004942377 00000 n 
-0004955789 00000 n 
-0004956182 00000 n 
-0004956231 00000 n 
-0004956280 00000 n 
-0004956418 00000 n 
-0004959497 00000 n 
-0004959859 00000 n 
-0004962391 00000 n 
-0004962767 00000 n 
-0004962815 00000 n 
-0004963002 00000 n 
-0004963131 00000 n 
-0005000220 00000 n 
-0005000594 00000 n 
-0005000642 00000 n 
-0005044388 00000 n 
-0005044736 00000 n 
-0005046480 00000 n 
-0005046856 00000 n 
-0005046904 00000 n 
-0005047093 00000 n 
-0005047217 00000 n 
-0005059769 00000 n 
-0005060202 00000 n 
-0005060250 00000 n 
-0005060482 00000 n 
-0005060712 00000 n 
-0005060760 00000 n 
-0005060808 00000 n 
-0005060947 00000 n 
-0005061070 00000 n 
-0005061118 00000 n 
-0005091910 00000 n 
-0005092299 00000 n 
-0005117900 00000 n 
-0005118289 00000 n 
-0005130759 00000 n 
-0005131148 00000 n 
-0005144302 00000 n 
-0005144691 00000 n 
-0005179384 00000 n 
-0005179760 00000 n 
-0005179808 00000 n 
-0005226559 00000 n 
-0005226907 00000 n 
-0005278341 00000 n 
-0005278689 00000 n 
-0005357075 00000 n 
-0005357436 00000 n 
-0005357485 00000 n 
-0005475765 00000 n 
-0005476113 00000 n 
-0005550583 00000 n 
-0005550931 00000 n 
-0005551781 00000 n 
-0005552148 00000 n 
-0005552196 00000 n 
-0005552318 00000 n 
-0005553242 00000 n 
-0005553609 00000 n 
-0005553657 00000 n 
-0005553855 00000 n 
-0005569996 00000 n 
-0005570434 00000 n 
-0005570482 00000 n 
-0005570651 00000 n 
-0005570825 00000 n 
-0005570999 00000 n 
-0005571207 00000 n 
-0005571413 00000 n 
-0005571596 00000 n 
-0005616212 00000 n 
-0005616560 00000 n 
-0005654573 00000 n 
-0005654921 00000 n 
-0005663353 00000 n 
-0005663714 00000 n 
-0005663762 00000 n 
-0005663810 00000 n 
-0005663858 00000 n 
-0005663906 00000 n 
-0005668412 00000 n 
-0005668760 00000 n 
-0005675632 00000 n 
-0005676006 00000 n 
-0005676054 00000 n 
-0005676102 00000 n 
-0005676150 00000 n 
-0005683648 00000 n 
-0005683996 00000 n 
-0005688530 00000 n 
-0005688891 00000 n 
-0005691988 00000 n 
-0005692382 00000 n 
-0005692430 00000 n 
-0005692601 00000 n 
-0005692739 00000 n 
-0005692876 00000 n 
-0005693012 00000 n 
-0005702535 00000 n 
-0005702923 00000 n 
-0005702971 00000 n 
-0005703019 00000 n 
-0005703067 00000 n 
-0005720794 00000 n 
-0005721181 00000 n 
-0005721230 00000 n 
-0005721279 00000 n 
-0005731180 00000 n 
-0005731554 00000 n 
-0005731602 00000 n 
-0005731651 00000 n 
-0005759078 00000 n 
-0005759465 00000 n 
-0005759513 00000 n 
-0005759562 00000 n 
-0005769504 00000 n 
-0005769879 00000 n 
-0005775392 00000 n 
-0005775740 00000 n 
-0005779705 00000 n 
-0005780072 00000 n 
-0005780120 00000 n 
-0005780288 00000 n 
-0005788198 00000 n 
-0005788572 00000 n 
-0005788620 00000 n 
-0005830454 00000 n 
-0005830802 00000 n 
-0005832525 00000 n 
-0005832873 00000 n 
-0005838207 00000 n 
-0005838600 00000 n 
-0005838648 00000 n 
-0005838826 00000 n 
-0005845755 00000 n 
-0005846116 00000 n 
-0005850576 00000 n 
-0005850937 00000 n 
-0005850985 00000 n 
-0005860544 00000 n 
-0005860905 00000 n 
-0005869645 00000 n 
-0005870006 00000 n 
-0005878479 00000 n 
-0005878840 00000 n 
-0005888777 00000 n 
-0005889166 00000 n 
-0005889214 00000 n 
-0005889474 00000 n 
-0005889668 00000 n 
-0005889716 00000 n 
-0005889764 00000 n 
-0005899020 00000 n 
-0005899381 00000 n 
-0005899429 00000 n 
-0005912131 00000 n 
-0005912492 00000 n 
-0005912540 00000 n 
-0005912588 00000 n 
-0005912636 00000 n 
-0005923377 00000 n 
-0005923738 00000 n 
-0005927592 00000 n 
-0005927940 00000 n 
-0005937908 00000 n 
-0005938256 00000 n 
-0005951345 00000 n 
-0005951693 00000 n 
-0005958595 00000 n 
-0005959024 00000 n 
-0005959072 00000 n 
-0005959283 00000 n 
-0005959477 00000 n 
-0005959684 00000 n 
-0005959886 00000 n 
-0005960083 00000 n 
-0005972636 00000 n 
-0005973061 00000 n 
-0005973109 00000 n 
-0005973330 00000 n 
-0005973378 00000 n 
-0005973426 00000 n 
-0005973648 00000 n 
-0005973883 00000 n 
-0005974120 00000 n 
-0005974247 00000 n 
-0005974480 00000 n 
-0005987162 00000 n 
-0005987605 00000 n 
-0005987653 00000 n 
-0005987701 00000 n 
-0005988139 00000 n 
-0005988576 00000 n 
-0005988624 00000 n 
-0005988820 00000 n 
-0005988868 00000 n 
-0005989106 00000 n 
-0005989344 00000 n 
-0005989581 00000 n 
-0005989812 00000 n 
-0005989932 00000 n 
-0005998022 00000 n 
-0005998478 00000 n 
-0005998526 00000 n 
-0005998652 00000 n 
-0005998776 00000 n 
-0005999125 00000 n 
-0005999349 00000 n 
-0005999574 00000 n 
-0005999777 00000 n 
-0005999971 00000 n 
-0006000092 00000 n 
-0006012318 00000 n 
-0006012705 00000 n 
-0006012753 00000 n 
-0006012801 00000 n 
-0006027464 00000 n 
-0006027864 00000 n 
-0006027912 00000 n 
-0006027960 00000 n 
-0006028009 00000 n 
-0006036886 00000 n 
-0006037279 00000 n 
-0006037472 00000 n 
-0006037520 00000 n 
-0006086019 00000 n 
-0006086393 00000 n 
-0006086441 00000 n 
-0006115801 00000 n 
-0006116162 00000 n 
-0006116210 00000 n 
-0006116258 00000 n 
-0006116306 00000 n 
-0006139005 00000 n 
-0006139398 00000 n 
-0006139446 00000 n 
-0006139899 00000 n 
-0006139948 00000 n 
-0006140185 00000 n 
-0006178366 00000 n 
-0006178727 00000 n 
-0006211716 00000 n 
-0006212077 00000 n 
-0006212125 00000 n 
-0006212814 00000 n 
-0006248165 00000 n 
-0006248526 00000 n 
-0006275487 00000 n 
-0006275835 00000 n 
-0006313747 00000 n 
-0006314095 00000 n 
-0006325036 00000 n 
-0006325416 00000 n 
-0006325464 00000 n 
-0006325605 00000 n 
-0006364570 00000 n 
-0006364918 00000 n 
-0006380826 00000 n 
-0006381300 00000 n 
-0006381348 00000 n 
-0006381601 00000 n 
-0006381784 00000 n 
-0006381967 00000 n 
-0006382150 00000 n 
-0006382333 00000 n 
-0006382516 00000 n 
-0006382699 00000 n 
-0006382882 00000 n 
-0006383065 00000 n 
-0006383248 00000 n 
-0006383680 00000 n 
-0006384028 00000 n 
-0006384076 00000 n 
-0006386337 00000 n 
-0006386698 00000 n 
-0006386746 00000 n 
-0006386794 00000 n 
-0006386842 00000 n 
-0006386890 00000 n 
-0006386938 00000 n 
-0006387352 00000 n 
-0006397065 00000 n 
-0006397413 00000 n 
-0006397461 00000 n 
-0006397509 00000 n 
-0006397557 00000 n 
-0006397605 00000 n 
-0006405728 00000 n 
-0006406171 00000 n 
-0006406219 00000 n 
-0006406353 00000 n 
-0006406401 00000 n 
-0006406587 00000 n 
-0006406791 00000 n 
-0006406994 00000 n 
-0006407170 00000 n 
-0006407410 00000 n 
-0006407617 00000 n 
-0006407834 00000 n 
-0006421246 00000 n 
-0006421724 00000 n 
-0006421772 00000 n 
-0006421820 00000 n 
-0006421868 00000 n 
-0006422072 00000 n 
-0006422273 00000 n 
-0006422472 00000 n 
-0006422664 00000 n 
-0006422855 00000 n 
-0006423107 00000 n 
-0006423359 00000 n 
-0006423490 00000 n 
-0006423616 00000 n 
-0006431089 00000 n 
-0006431509 00000 n 
-0006431557 00000 n 
-0006431698 00000 n 
-0006431746 00000 n 
-0006431794 00000 n 
-0006431842 00000 n 
-0006431988 00000 n 
-0006432036 00000 n 
-0006432369 00000 n 
-0006432538 00000 n 
-0006432673 00000 n 
-0006432721 00000 n 
-0006432913 00000 n 
-0006448220 00000 n 
-0006448694 00000 n 
-0006448927 00000 n 
-0006448976 00000 n 
-0006449133 00000 n 
-0006449182 00000 n 
-0006449351 00000 n 
-0006449400 00000 n 
-0006449549 00000 n 
-0006449598 00000 n 
-0006449753 00000 n 
-0006449802 00000 n 
-0006449954 00000 n 
-0006450104 00000 n 
-0006450250 00000 n 
-0006450445 00000 n 
-0006450638 00000 n 
-0006474448 00000 n 
-0006474828 00000 n 
-0006474876 00000 n 
-0006475069 00000 n 
-0006480647 00000 n 
-0006480995 00000 n 
-0006482169 00000 n 
-0006482536 00000 n 
-0006482584 00000 n 
-0006482709 00000 n 
-0006493880 00000 n 
-0006494341 00000 n 
-0006494389 00000 n 
-0006494437 00000 n 
-0006494564 00000 n 
-0006494612 00000 n 
-0006494732 00000 n 
-0006494871 00000 n 
-0006494919 00000 n 
-0006495142 00000 n 
-0006495277 00000 n 
-0006495325 00000 n 
-0006495508 00000 n 
-0006495702 00000 n 
-0006495897 00000 n 
-0006496020 00000 n 
-0006496223 00000 n 
-0006496271 00000 n 
-0006512328 00000 n 
-0006512730 00000 n 
-0006512778 00000 n 
-0006512911 00000 n 
-0006513135 00000 n 
-0006513183 00000 n 
-0006530222 00000 n 
-0006530647 00000 n 
-0006530695 00000 n 
-0006530917 00000 n 
-0006531038 00000 n 
-0006531086 00000 n 
-0006531213 00000 n 
-0006531435 00000 n 
-0006531483 00000 n 
-0006531608 00000 n 
-0006531733 00000 n 
-0006531781 00000 n 
-0006533146 00000 n 
-0006533509 00000 n 
-0006533632 00000 n 
-0006533757 00000 n 
-0006553752 00000 n 
-0006554113 00000 n 
-0006554161 00000 n 
-0006554209 00000 n 
-0006589427 00000 n 
-0006589834 00000 n 
-0006589882 00000 n 
-0006589930 00000 n 
-0006590060 00000 n 
-0006590108 00000 n 
-0006590242 00000 n 
-0006590392 00000 n 
-0006590525 00000 n 
-0006604660 00000 n 
-0006605080 00000 n 
-0006605128 00000 n 
-0006605352 00000 n 
-0006605400 00000 n 
-0006605620 00000 n 
-0006605668 00000 n 
-0006605795 00000 n 
-0006605843 00000 n 
-0006605891 00000 n 
-0006606382 00000 n 
-0006606616 00000 n 
-0006610709 00000 n 
-0006611107 00000 n 
-0006611155 00000 n 
-0006611406 00000 n 
-0006611538 00000 n 
-0006611674 00000 n 
-0006623251 00000 n 
-0006623653 00000 n 
-0006623701 00000 n 
-0006624251 00000 n 
-0006624434 00000 n 
-0006624482 00000 n 
-0006624695 00000 n 
-0006624743 00000 n 
-0006624791 00000 n 
-0006624839 00000 n 
-0006649512 00000 n 
-0006649959 00000 n 
-0006650007 00000 n 
-0006650142 00000 n 
-0006650190 00000 n 
-0006650417 00000 n 
-0006650465 00000 n 
-0006650679 00000 n 
-0006650814 00000 n 
-0006650862 00000 n 
-0006651081 00000 n 
-0006651313 00000 n 
-0006651540 00000 n 
-0006665291 00000 n 
-0006665769 00000 n 
-0006665817 00000 n 
-0006665948 00000 n 
-0006666083 00000 n 
-0006666131 00000 n 
-0006666316 00000 n 
-0006666511 00000 n 
-0006666742 00000 n 
-0006666937 00000 n 
-0006667105 00000 n 
-0006667271 00000 n 
-0006667398 00000 n 
-0006667446 00000 n 
-0006667494 00000 n 
-0006667542 00000 n 
-0006668288 00000 n 
-0006668336 00000 n 
-0006668384 00000 n 
-0006679261 00000 n 
-0006679694 00000 n 
-0006679742 00000 n 
-0006679790 00000 n 
-0006680020 00000 n 
-0006680068 00000 n 
-0006680261 00000 n 
-0006680456 00000 n 
-0006680652 00000 n 
-0006687983 00000 n 
-0006688363 00000 n 
-0006688493 00000 n 
-0006692962 00000 n 
-0006693369 00000 n 
-0006693417 00000 n 
-0006693465 00000 n 
-0006693590 00000 n 
-0006693716 00000 n 
-0006693971 00000 n 
-0006694019 00000 n 
-0006694285 00000 n 
-0006709020 00000 n 
-0006709512 00000 n 
-0006709560 00000 n 
-0006710160 00000 n 
-0006710285 00000 n 
-0006710333 00000 n 
-0006710523 00000 n 
-0006710714 00000 n 
-0006710762 00000 n 
-0006710956 00000 n 
-0006711154 00000 n 
-0006711336 00000 n 
-0006711518 00000 n 
-0006711710 00000 n 
-0006711979 00000 n 
-0006712248 00000 n 
-0006712498 00000 n 
-0006712746 00000 n 
-0006720929 00000 n 
-0006721375 00000 n 
-0006721568 00000 n 
-0006721762 00000 n 
-0006721957 00000 n 
-0006722152 00000 n 
-0006722201 00000 n 
-0006724409 00000 n 
-0006724757 00000 n 
-0006724805 00000 n 
-0006729990 00000 n 
-0006730366 00000 n 
-0006730414 00000 n 
-0006730541 00000 n 
-0006730665 00000 n 
-0006731609 00000 n 
-0006731976 00000 n 
-0006732024 00000 n 
-0006732152 00000 n 
-0006732713 00000 n 
-0006733061 00000 n 
-0006733109 00000 n 
-0006740369 00000 n 
-0006740807 00000 n 
-0006740855 00000 n 
-0006741026 00000 n 
-0006741145 00000 n 
-0006741296 00000 n 
-0006741446 00000 n 
-0006741702 00000 n 
-0006741826 00000 n 
-0006751423 00000 n 
-0006751797 00000 n 
-0006751845 00000 n 
-0006751893 00000 n 
-0006752392 00000 n 
-0006752440 00000 n 
-0006752488 00000 n 
-0006752536 00000 n 
-0006752584 00000 n 
-0006775356 00000 n 
-0006775730 00000 n 
-0006775778 00000 n 
-0006870842 00000 n 
-0006871203 00000 n 
-0006901149 00000 n 
-0006901538 00000 n 
-0006901797 00000 n 
-0006901919 00000 n 
-0006908367 00000 n 
-0006908779 00000 n 
-0006908827 00000 n 
-0006908875 00000 n 
-0006909042 00000 n 
-0006909090 00000 n 
-0006909275 00000 n 
-0006909421 00000 n 
-0006909608 00000 n 
-0006909656 00000 n 
-0006909827 00000 n 
-0006909875 00000 n 
-0006909923 00000 n 
-0006910552 00000 n 
-0006910737 00000 n 
-0006916421 00000 n 
-0006916801 00000 n 
-0006916849 00000 n 
-0006916897 00000 n 
-0006916945 00000 n 
-0006916993 00000 n 
-0006917120 00000 n 
-0006917168 00000 n 
-0006967539 00000 n 
-0006967914 00000 n 
-0006967962 00000 n 
-0006968010 00000 n 
-0006968058 00000 n 
-0006979764 00000 n 
-0006980157 00000 n 
-0006980343 00000 n 
-0006980391 00000 n 
-0007010007 00000 n 
-0007010368 00000 n 
-0007010416 00000 n 
-0007011155 00000 n 
-0007091593 00000 n 
-0007091941 00000 n 
-0007158398 00000 n 
-0007158746 00000 n 
-0007210390 00000 n 
-0007210738 00000 n 
-0007264715 00000 n 
-0007265095 00000 n 
-0007265143 00000 n 
-0007265305 00000 n 
-0007265353 00000 n 
-0007280133 00000 n 
-0007280558 00000 n 
-0007280606 00000 n 
-0007280742 00000 n 
-0007280790 00000 n 
-0007280838 00000 n 
-0007280977 00000 n 
-0007281025 00000 n 
-0007281167 00000 n 
-0007281407 00000 n 
-0007281455 00000 n 
-0007281596 00000 n 
-0007281878 00000 n 
-0007295526 00000 n 
-0007295955 00000 n 
-0007296003 00000 n 
-0007296051 00000 n 
-0007296184 00000 n 
-0007296318 00000 n 
-0007296580 00000 n 
-0007296628 00000 n 
-0007296827 00000 n 
-0007297026 00000 n 
-0007343572 00000 n 
-0007343988 00000 n 
-0007344182 00000 n 
-0007344230 00000 n 
-0007344374 00000 n 
-0007344421 00000 n 
-0007344654 00000 n 
-0007344929 00000 n 
-0007345203 00000 n 
-0007356026 00000 n 
-0007356455 00000 n 
-0007356503 00000 n 
-0007356697 00000 n 
-0007356745 00000 n 
-0007356982 00000 n 
-0007357203 00000 n 
-0007357422 00000 n 
-0007357651 00000 n 
-0007371007 00000 n 
-0007371387 00000 n 
-0007371435 00000 n 
-0007372074 00000 n 
-0007372122 00000 n 
-0007372362 00000 n 
-0007376988 00000 n 
-0007377418 00000 n 
-0007377660 00000 n 
-0007377708 00000 n 
-0007377901 00000 n 
-0007378092 00000 n 
-0007378285 00000 n 
-0007378479 00000 n 
-0007378670 00000 n 
-0007378862 00000 n 
-0007379058 00000 n 
-0007396222 00000 n 
-0007396611 00000 n 
-0007396659 00000 n 
-0007396785 00000 n 
-0007396833 00000 n 
-0007397047 00000 n 
-0007397095 00000 n 
-0007412363 00000 n 
-0007412756 00000 n 
-0007412964 00000 n 
-0007413012 00000 n 
-0007413060 00000 n 
-0007413108 00000 n 
-0007413941 00000 n 
-0007414289 00000 n 
-0007417734 00000 n 
-0007418132 00000 n 
-0007418180 00000 n 
-0007418228 00000 n 
-0007418360 00000 n 
-0007418408 00000 n 
-0007419094 00000 n 
-0007419218 00000 n 
-0007419266 00000 n 
-0007419397 00000 n 
-0007449669 00000 n 
-0007450062 00000 n 
-0007450110 00000 n 
-0007450244 00000 n 
-0007450292 00000 n 
-0007450340 00000 n 
-0007450388 00000 n 
-0007450436 00000 n 
-0007484942 00000 n 
-0007485344 00000 n 
-0007485392 00000 n 
-0007485584 00000 n 
-0007485775 00000 n 
-0007485823 00000 n 
-0007485871 00000 n 
-0007485919 00000 n 
-0007485967 00000 n 
-0007486575 00000 n 
-0007528571 00000 n 
-0007528945 00000 n 
-0007528993 00000 n 
-0007529041 00000 n 
-0007541220 00000 n 
-0007541636 00000 n 
-0007541776 00000 n 
-0007541824 00000 n 
-0007541872 00000 n 
-0007542065 00000 n 
-0007542256 00000 n 
-0007542304 00000 n 
-0007542496 00000 n 
-0007542688 00000 n 
-0007542736 00000 n 
-0007548495 00000 n 
-0007548856 00000 n 
-0007548903 00000 n 
-0007548950 00000 n 
-0007553566 00000 n 
-0007553951 00000 n 
-0007553999 00000 n 
-0007554135 00000 n 
-0007554183 00000 n 
-0007554231 00000 n 
-0007554279 00000 n 
-0007554472 00000 n 
-0007554663 00000 n 
-0007554711 00000 n 
-0007560829 00000 n 
-0007561231 00000 n 
-0007561279 00000 n 
-0007561327 00000 n 
-0007561375 00000 n 
-0007561423 00000 n 
-0007561624 00000 n 
-0007561767 00000 n 
-0007578832 00000 n 
-0007579221 00000 n 
-0007579269 00000 n 
-0007579317 00000 n 
-0007579365 00000 n 
-0007579536 00000 n 
-0007579584 00000 n 
-0007579767 00000 n 
-0007615349 00000 n 
-0007615742 00000 n 
-0007615790 00000 n 
-0007615838 00000 n 
-0007615886 00000 n 
-0007616020 00000 n 
-0007635716 00000 n 
-0007636096 00000 n 
-0007636144 00000 n 
-0007636340 00000 n 
-0007649428 00000 n 
-0007649821 00000 n 
-0007649869 00000 n 
-0007650041 00000 n 
-0007662442 00000 n 
-0007662857 00000 n 
-0007663047 00000 n 
-0007663288 00000 n 
-0007665264 00000 n 
-0007665612 00000 n 
-0007687986 00000 n 
-0007688375 00000 n 
-0007688423 00000 n 
-0007688471 00000 n 
-0007688663 00000 n 
-0007688852 00000 n 
-0007689796 00000 n 
-0007690163 00000 n 
-0007690211 00000 n 
-0007690339 00000 n 
-0007704023 00000 n 
-0007704397 00000 n 
-0007704445 00000 n 
-0007704493 00000 n 
-0007712372 00000 n 
-0007712787 00000 n 
-0007712835 00000 n 
-0007712883 00000 n 
-0007713078 00000 n 
-0007713295 00000 n 
-0007737437 00000 n 
-0007737826 00000 n 
-0007737874 00000 n 
-0007737922 00000 n 
-0007738116 00000 n 
-0007738309 00000 n 
-0007738729 00000 n 
-0007739077 00000 n 
-0007739125 00000 n 
-0007741148 00000 n 
-0007741533 00000 n 
-0007741581 00000 n 
-0007741706 00000 n 
-0007741829 00000 n 
-0007741952 00000 n 
-0007742746 00000 n 
-0007743113 00000 n 
-0007743161 00000 n 
-0007743294 00000 n 
-0007752419 00000 n 
-0007752780 00000 n 
-0007752828 00000 n 
-0007752876 00000 n 
-0007752924 00000 n 
-0007752972 00000 n 
-0007753021 00000 n 
-0007753070 00000 n 
-0007753119 00000 n 
-0007765892 00000 n 
-0007766253 00000 n 
-0007766301 00000 n 
-0007766348 00000 n 
-0007766396 00000 n 
-0007775097 00000 n 
-0007775477 00000 n 
-0007775525 00000 n 
-0007775573 00000 n 
-0007775791 00000 n 
-0007779381 00000 n 
-0007779797 00000 n 
-0007779845 00000 n 
-0007780032 00000 n 
-0007780080 00000 n 
-0007780289 00000 n 
-0007780495 00000 n 
-0007780646 00000 n 
-0007780794 00000 n 
-0007783009 00000 n 
-0007783394 00000 n 
-0007783442 00000 n 
-0007783565 00000 n 
-0007783690 00000 n 
-0007783820 00000 n 
-0007797517 00000 n 
-0007797937 00000 n 
-0007797985 00000 n 
-0007798104 00000 n 
-0007798222 00000 n 
-0007798347 00000 n 
-0007798469 00000 n 
-0007798517 00000 n 
-0007817813 00000 n 
-0007818174 00000 n 
-0007818222 00000 n 
-0007818668 00000 n 
-0007828633 00000 n 
-0007828994 00000 n 
-0007829042 00000 n 
-0007829090 00000 n 
-0007840659 00000 n 
-0007841020 00000 n 
-0007841068 00000 n 
-0007841116 00000 n 
-0007841164 00000 n 
-0007841212 00000 n 
-0007854405 00000 n 
-0007854779 00000 n 
-0007854827 00000 n 
-0007854874 00000 n 
-0007864703 00000 n 
-0007865077 00000 n 
-0007865125 00000 n 
-0007865173 00000 n 
-0007877639 00000 n 
-0007878041 00000 n 
-0007878089 00000 n 
-0007878219 00000 n 
-0007878267 00000 n 
-0007878391 00000 n 
-0007878439 00000 n 
-0007878487 00000 n 
-0007878535 00000 n 
-0007879285 00000 n 
-0007883800 00000 n 
-0007884206 00000 n 
-0007884255 00000 n 
-0007884388 00000 n 
-0007884437 00000 n 
-0007894073 00000 n 
-0007894447 00000 n 
-0007905434 00000 n 
-0007905855 00000 n 
-0007906081 00000 n 
-0007906130 00000 n 
-0007906314 00000 n 
-0007906363 00000 n 
-0007906412 00000 n 
-0007916568 00000 n 
-0007916948 00000 n 
-0007917081 00000 n 
-0007917129 00000 n 
-0007917177 00000 n 
-0007926006 00000 n 
-0007926408 00000 n 
-0007926456 00000 n 
-0007926504 00000 n 
-0007926635 00000 n 
-0007926683 00000 n 
-0007926809 00000 n 
-0007937688 00000 n 
-0007938090 00000 n 
-0007938139 00000 n 
-0007938272 00000 n 
-0007938321 00000 n 
-0007938370 00000 n 
-0007938594 00000 n 
-0007950468 00000 n 
-0007950875 00000 n 
-0007951103 00000 n 
-0007951151 00000 n 
-0007951332 00000 n 
-0007951523 00000 n 
-0007951571 00000 n 
-0007951809 00000 n 
-0007964316 00000 n 
-0007964677 00000 n 
-0007964725 00000 n 
-0007964773 00000 n 
-0007964821 00000 n 
-0007970843 00000 n 
-0007971250 00000 n 
-0007971298 00000 n 
-0007971346 00000 n 
-0007971600 00000 n 
-0007971727 00000 n 
-0007971775 00000 n 
-0007972146 00000 n 
-0007972354 00000 n 
-0007972549 00000 n 
-0007984529 00000 n 
-0007984935 00000 n 
-0007984983 00000 n 
-0007985031 00000 n 
-0007985151 00000 n 
-0008004996 00000 n 
-0008005383 00000 n 
-0008005432 00000 n 
-0008005481 00000 n 
-0008018162 00000 n 
-0008018599 00000 n 
-0008018814 00000 n 
-0008018862 00000 n 
-0008019016 00000 n 
-0008019303 00000 n 
-0008019352 00000 n 
-0008019401 00000 n 
-0008033345 00000 n 
-0008033738 00000 n 
-0008033787 00000 n 
-0008034524 00000 n 
-0008034654 00000 n 
-0008034703 00000 n 
-0008048043 00000 n 
-0008048436 00000 n 
-0008048556 00000 n 
-0008048604 00000 n 
-0008050943 00000 n 
-0008051291 00000 n 
-0008064575 00000 n 
-0008065030 00000 n 
-0008065078 00000 n 
-0008065318 00000 n 
-0008065366 00000 n 
-0008065599 00000 n 
-0008065831 00000 n 
-0008066077 00000 n 
-0008066322 00000 n 
-0008066371 00000 n 
-0008066420 00000 n 
-0008082834 00000 n 
-0008083236 00000 n 
-0008083414 00000 n 
-0008083463 00000 n 
-0008083512 00000 n 
-0008089811 00000 n 
-0008090159 00000 n 
-0008090207 00000 n 
-0008097930 00000 n 
-0008098278 00000 n 
-0008099461 00000 n 
-0008099809 00000 n 
-0008110588 00000 n 
-0008110986 00000 n 
-0008111034 00000 n 
-0008111082 00000 n 
-0008111249 00000 n 
-0008111375 00000 n 
-0008111505 00000 n 
-0008111553 00000 n 
-0008111601 00000 n 
-0008111649 00000 n 
-0008146755 00000 n 
-0008147116 00000 n 
-0008147164 00000 n 
-0008147212 00000 n 
-0008147260 00000 n 
-0008304401 00000 n 
-0008308021 00000 n 
-0008308717 00000 n 
-0008309091 00000 n 
-0008403241 00000 n 
-0008489562 00000 n 
-0008490574 00000 n 
-0008490948 00000 n 
-0008561465 00000 n 
-0008572402 00000 n 
-0008572791 00000 n 
-0008572839 00000 n 
-0008573021 00000 n 
-0008573069 00000 n 
-0008573263 00000 n 
-0008583104 00000 n 
-0008583465 00000 n 
-0008635937 00000 n 
-0008641600 00000 n 
-0008641987 00000 n 
-0008642037 00000 n 
-0008642681 00000 n 
-0008652429 00000 n 
-0008652816 00000 n 
-0008652864 00000 n 
-0008658979 00000 n 
-0008659367 00000 n 
-0008659415 00000 n 
-0008815502 00000 n 
-0008817523 00000 n 
-0008817573 00000 n 
-0008834113 00000 n 
-0008834502 00000 n 
-0008834722 00000 n 
-0008834771 00000 n 
-0008834966 00000 n 
-0008849229 00000 n 
-0008849622 00000 n 
-0008849670 00000 n 
-0008849718 00000 n 
-0008849766 00000 n 
-0008849895 00000 n 
-0008862547 00000 n 
-0008862921 00000 n 
-0008862969 00000 n 
-0008863017 00000 n 
-0008874292 00000 n 
-0008874653 00000 n 
-0008874701 00000 n 
-0008883133 00000 n 
-0008883494 00000 n 
-0008883542 00000 n 
-0008894190 00000 n 
-0008894538 00000 n 
-0008911509 00000 n 
-0008911883 00000 n 
-0008911931 00000 n 
-0008911979 00000 n 
-0008925024 00000 n 
-0008925453 00000 n 
-0008925501 00000 n 
-0008925621 00000 n 
-0008925751 00000 n 
-0008925888 00000 n 
-0008925936 00000 n 
-0008926063 00000 n 
-0008926192 00000 n 
-0008926241 00000 n 
-0008934127 00000 n 
-0008934475 00000 n 
-0008944056 00000 n 
-0008944430 00000 n 
-0008944478 00000 n 
-0008944527 00000 n 
-0008959130 00000 n 
-0008959504 00000 n 
-0008959552 00000 n 
-0008973537 00000 n 
-0008973917 00000 n 
-0008973964 00000 n 
-0008974555 00000 n 
-0008974748 00000 n 
-0008985408 00000 n 
-0008985782 00000 n 
-0008985831 00000 n 
-0009001924 00000 n 
-0009002304 00000 n 
-0009002351 00000 n 
-0009002544 00000 n 
-0009004001 00000 n 
-0009004349 00000 n 
-0009012728 00000 n 
-0009013113 00000 n 
-0009013161 00000 n 
-0009013365 00000 n 
-0009013413 00000 n 
-0009013461 00000 n 
-0009013509 00000 n 
-0009014021 00000 n 
-0009014069 00000 n 
-0009014117 00000 n 
-0009014309 00000 n 
-0009014357 00000 n 
-0009014482 00000 n 
-0009016241 00000 n 
-0009016617 00000 n 
-0009016665 00000 n 
-0009016787 00000 n 
-0009016905 00000 n 
-0009029389 00000 n 
-0009029763 00000 n 
-0009029811 00000 n 
-0009029859 00000 n 
-0009029907 00000 n 
-0009039156 00000 n 
-0009039530 00000 n 
-0009039578 00000 n 
-0009039626 00000 n 
-0009039674 00000 n 
-0009039722 00000 n 
-0009040225 00000 n 
-0009050958 00000 n 
-0009051382 00000 n 
-0009051430 00000 n 
-0009051576 00000 n 
-0009051624 00000 n 
-0009051673 00000 n 
-0009051805 00000 n 
-0009051936 00000 n 
-0009063932 00000 n 
-0009064280 00000 n 
-0009068575 00000 n 
-0009069004 00000 n 
-0009069052 00000 n 
-0009069178 00000 n 
-0009069304 00000 n 
-0009069510 00000 n 
-0009069639 00000 n 
-0009069766 00000 n 
-0009082319 00000 n 
-0009082776 00000 n 
-0009082824 00000 n 
-0009082872 00000 n 
-0009082920 00000 n 
-0009083044 00000 n 
-0009083168 00000 n 
-0009083296 00000 n 
-0009083423 00000 n 
-0009083607 00000 n 
-0009083724 00000 n 
-0009083858 00000 n 
-0009083906 00000 n 
-0009084020 00000 n 
-0009084147 00000 n 
-0009084195 00000 n 
-0009084313 00000 n 
-0009084440 00000 n 
-0009102145 00000 n 
-0009102583 00000 n 
-0009102631 00000 n 
-0009103407 00000 n 
-0009103538 00000 n 
-0009103762 00000 n 
-0009103906 00000 n 
-0009103954 00000 n 
-0009104002 00000 n 
-0009104134 00000 n 
-0009104284 00000 n 
-0009104439 00000 n 
-0009116310 00000 n 
-0009116699 00000 n 
-0009116747 00000 n 
-0009116795 00000 n 
-0009116937 00000 n 
-0009117071 00000 n 
-0009129981 00000 n 
-0009130442 00000 n 
-0009130569 00000 n 
-0009130617 00000 n 
-0009130665 00000 n 
-0009130805 00000 n 
-0009130950 00000 n 
-0009131074 00000 n 
-0009131122 00000 n 
-0009131248 00000 n 
-0009131396 00000 n 
-0009131531 00000 n 
-0009131579 00000 n 
-0009131722 00000 n 
-0009131870 00000 n 
-0009132002 00000 n 
-0009145853 00000 n 
-0009146214 00000 n 
-0009146262 00000 n 
-0009161945 00000 n 
-0009162361 00000 n 
-0009162409 00000 n 
-0009162623 00000 n 
-0009162834 00000 n 
-0009193871 00000 n 
-0009194258 00000 n 
-0009202240 00000 n 
-0009202614 00000 n 
-0009202662 00000 n 
-0009202710 00000 n 
-0009203340 00000 n 
-0009203388 00000 n 
-0009203436 00000 n 
-0009204782 00000 n 
-0009205130 00000 n 
-0009205178 00000 n 
-0009216897 00000 n 
-0009217349 00000 n 
-0009217397 00000 n 
-0009217713 00000 n 
-0009217893 00000 n 
-0009218020 00000 n 
-0009218140 00000 n 
-0009218188 00000 n 
-0009218373 00000 n 
-0009218421 00000 n 
-0009218596 00000 n 
-0009218768 00000 n 
-0009218816 00000 n 
-0009218984 00000 n 
-0009219032 00000 n 
-0009219220 00000 n 
-0009231713 00000 n 
-0009232087 00000 n 
-0009232135 00000 n 
-0009242147 00000 n 
-0009242562 00000 n 
-0009242610 00000 n 
-0009242854 00000 n 
-0009243097 00000 n 
-0009245465 00000 n 
-0009245850 00000 n 
-0009245898 00000 n 
-0009246090 00000 n 
-0009246283 00000 n 
-0009246451 00000 n 
-0009260450 00000 n 
-0009260866 00000 n 
-0009260914 00000 n 
-0009260962 00000 n 
-0009261010 00000 n 
-0009261144 00000 n 
-0009261192 00000 n 
-0009261240 00000 n 
-0009261414 00000 n 
-0009271413 00000 n 
-0009271787 00000 n 
-0009271835 00000 n 
-0009271882 00000 n 
-0009271930 00000 n 
-0009281507 00000 n 
-0009281951 00000 n 
-0009281999 00000 n 
-0009282545 00000 n 
-0009282770 00000 n 
-0009282994 00000 n 
-0009283042 00000 n 
-0009283183 00000 n 
-0009283232 00000 n 
-0009283358 00000 n 
-0009283556 00000 n 
-0009293559 00000 n 
-0009293974 00000 n 
-0009294022 00000 n 
-0009294070 00000 n 
-0009294190 00000 n 
-0009294239 00000 n 
-0009294878 00000 n 
-0009294927 00000 n 
-0009295053 00000 n 
-0009295102 00000 n 
-0009295151 00000 n 
-0009307369 00000 n 
-0009307771 00000 n 
-0009307819 00000 n 
-0009307952 00000 n 
-0009308081 00000 n 
-0009308129 00000 n 
-0009308177 00000 n 
-0009319500 00000 n 
-0009319911 00000 n 
-0009319959 00000 n 
-0009320007 00000 n 
-0009320132 00000 n 
-0009320180 00000 n 
-0009320365 00000 n 
-0009320547 00000 n 
-0009322036 00000 n 
-0009322429 00000 n 
-0009322477 00000 n 
-0009322600 00000 n 
-0009322649 00000 n 
-0009339997 00000 n 
-0009340384 00000 n 
-0009340433 00000 n 
-0009355395 00000 n 
-0009355819 00000 n 
-0009356010 00000 n 
-0009356181 00000 n 
-0009356375 00000 n 
-0009369002 00000 n 
-0009369376 00000 n 
-0009383931 00000 n 
-0009384351 00000 n 
-0009384488 00000 n 
-0009384625 00000 n 
-0009384762 00000 n 
-0009384939 00000 n 
-0009398895 00000 n 
-0009399297 00000 n 
-0009399494 00000 n 
-0009399697 00000 n 
-0009411531 00000 n 
-0009411960 00000 n 
-0009412152 00000 n 
-0009412200 00000 n 
-0009412334 00000 n 
-0009412468 00000 n 
-0009412602 00000 n 
-0009412731 00000 n 
-0009416297 00000 n 
-0009416682 00000 n 
-0009416730 00000 n 
-0009416935 00000 n 
-0009417117 00000 n 
-0009417297 00000 n 
-0009419376 00000 n 
-0009419752 00000 n 
-0009419800 00000 n 
-0009419999 00000 n 
-0009420150 00000 n 
-0009422700 00000 n 
-0009423094 00000 n 
-0009423142 00000 n 
-0009423310 00000 n 
-0009423358 00000 n 
-0009423512 00000 n 
-0009423560 00000 n 
-0009423728 00000 n 
-0009423858 00000 n 
-0009437005 00000 n 
-0009437403 00000 n 
-0009437451 00000 n 
-0009437576 00000 n 
-0009437624 00000 n 
-0009437756 00000 n 
-0009437804 00000 n 
-0009438018 00000 n 
-0009456381 00000 n 
-0009456779 00000 n 
-0009456827 00000 n 
-0009456964 00000 n 
-0009457012 00000 n 
-0009457187 00000 n 
-0009457319 00000 n 
-0009469380 00000 n 
-0009469782 00000 n 
-0009469838 00000 n 
-0009470022 00000 n 
-0009470078 00000 n 
-0009470134 00000 n 
-0009470190 00000 n 
-0009470326 00000 n 
-0009470375 00000 n 
-0009470424 00000 n 
-0009470473 00000 n 
-0009470522 00000 n 
-0009484217 00000 n 
-0009484578 00000 n 
-0009484626 00000 n 
-0009484674 00000 n 
-0009497548 00000 n 
-0009497922 00000 n 
-0009497970 00000 n 
-0009498593 00000 n 
-0009498641 00000 n 
-0009498689 00000 n 
-0009498737 00000 n 
-0009506077 00000 n 
-0009506425 00000 n 
-0009506473 00000 n 
-0009506521 00000 n 
-0009506569 00000 n 
-0009506617 00000 n 
-0009532292 00000 n 
-0009532653 00000 n 
-0009532701 00000 n 
-0009549316 00000 n 
-0009549692 00000 n 
-0009565320 00000 n 
-0009565713 00000 n 
-0009565761 00000 n 
-0009565960 00000 n 
-0009566008 00000 n 
-0009566056 00000 n 
-0009582943 00000 n 
-0009583363 00000 n 
-0009583558 00000 n 
-0009583740 00000 n 
-0009583788 00000 n 
-0009584005 00000 n 
-0009584221 00000 n 
-0009596401 00000 n 
-0009596749 00000 n 
-0009608637 00000 n 
-0009609039 00000 n 
-0009609088 00000 n 
-0009609137 00000 n 
-0009609335 00000 n 
-0009609471 00000 n 
-0009609520 00000 n 
-0009625156 00000 n 
-0009625517 00000 n 
-0009636914 00000 n 
-0009637320 00000 n 
-0009637368 00000 n 
-0009637416 00000 n 
-0009637464 00000 n 
-0009637650 00000 n 
-0009637699 00000 n 
-0009637748 00000 n 
-0009652236 00000 n 
-0009652651 00000 n 
-0009652700 00000 n 
-0009653434 00000 n 
-0009653638 00000 n 
-0009653779 00000 n 
-0009653828 00000 n 
-0009684327 00000 n 
-0009684688 00000 n 
-0009684736 00000 n 
-0009684784 00000 n 
-0009684832 00000 n 
-0009684880 00000 n 
-0009699250 00000 n 
-0009699611 00000 n 
-0009699659 00000 n 
-0009699707 00000 n 
-0009699755 00000 n 
-0009699803 00000 n 
-0009699851 00000 n 
-0009700420 00000 n 
-0009711025 00000 n 
-0009711449 00000 n 
-0009711498 00000 n 
-0009711726 00000 n 
-0009711953 00000 n 
-0009712002 00000 n 
-0009712051 00000 n 
-0009712534 00000 n 
-0009712731 00000 n 
-0009712780 00000 n 
-0009723251 00000 n 
-0009723631 00000 n 
-0009723679 00000 n 
-0009723890 00000 n 
-0009723938 00000 n 
-0009723986 00000 n 
-0009724034 00000 n 
-0009739080 00000 n 
-0009739509 00000 n 
-0009739557 00000 n 
-0009739605 00000 n 
-0009739790 00000 n 
-0009739962 00000 n 
-0009740142 00000 n 
-0009740319 00000 n 
-0009740367 00000 n 
-0009740504 00000 n 
-0009756606 00000 n 
-0009757055 00000 n 
-0009757185 00000 n 
-0009757404 00000 n 
-0009757453 00000 n 
-0009757579 00000 n 
-0009757707 00000 n 
-0009770684 00000 n 
-0009771137 00000 n 
-0009771185 00000 n 
-0009771233 00000 n 
-0009771400 00000 n 
-0009771570 00000 n 
-0009771762 00000 n 
-0009771811 00000 n 
-0009771860 00000 n 
-0009772056 00000 n 
-0009772243 00000 n 
-0009772292 00000 n 
-0009772729 00000 n 
-0009772963 00000 n 
-0009787207 00000 n 
-0009787659 00000 n 
-0009787706 00000 n 
-0009787931 00000 n 
-0009788152 00000 n 
-0009788200 00000 n 
-0009788391 00000 n 
-0009801478 00000 n 
-0009801852 00000 n 
-0009813034 00000 n 
-0009813414 00000 n 
-0009813462 00000 n 
-0009813510 00000 n 
-0009813692 00000 n 
-0009822250 00000 n 
-0009822679 00000 n 
-0009822727 00000 n 
-0009822775 00000 n 
-0009823440 00000 n 
-0009823622 00000 n 
-0009823803 00000 n 
-0009823851 00000 n 
-0009824271 00000 n 
-0009824319 00000 n 
-0009824469 00000 n 
-0009824517 00000 n 
-0009824565 00000 n 
-0009824827 00000 n 
-0009824875 00000 n 
-0009825070 00000 n 
-0009826987 00000 n 
-0009827372 00000 n 
-0009827420 00000 n 
-0009827654 00000 n 
-0009827887 00000 n 
-0009828015 00000 n 
-0009853716 00000 n 
-0009854096 00000 n 
-0009854144 00000 n 
-0009854305 00000 n 
-0009879762 00000 n 
-0009880129 00000 n 
-0009880328 00000 n 
-0009887966 00000 n 
-0009888355 00000 n 
-0009888403 00000 n 
-0009888583 00000 n 
-0009888709 00000 n 
-0009933062 00000 n 
-0009933410 00000 n 
-0009965581 00000 n 
-0009965961 00000 n 
-0009966009 00000 n 
-0009966178 00000 n 
-0010010886 00000 n 
-0010011234 00000 n 
-0010017955 00000 n 
-0010018348 00000 n 
-0010018396 00000 n 
-0010018522 00000 n 
-0010066199 00000 n 
-0010066579 00000 n 
-0010066832 00000 n 
-0010067236 00000 n 
-0010067584 00000 n 
-0010067632 00000 n 
-0010083184 00000 n 
-0010083604 00000 n 
-0010083652 00000 n 
-0010083823 00000 n 
-0010083949 00000 n 
-0010084064 00000 n 
-0010084195 00000 n 
-0010084243 00000 n 
-0010108574 00000 n 
-0010108922 00000 n 
-0010127815 00000 n 
-0010128221 00000 n 
-0010128269 00000 n 
-0010128414 00000 n 
-0010146960 00000 n 
-0010147366 00000 n 
-0010147588 00000 n 
-0010155603 00000 n 
-0010156023 00000 n 
-0010156071 00000 n 
-0010156550 00000 n 
-0010156757 00000 n 
-0010156970 00000 n 
-0010157182 00000 n 
-0010157375 00000 n 
-0010157602 00000 n 
-0010177531 00000 n 
-0010177933 00000 n 
-0010177981 00000 n 
-0010178176 00000 n 
-0010178370 00000 n 
-0010178418 00000 n 
-0010198576 00000 n 
-0010198969 00000 n 
-0010199017 00000 n 
-0010199255 00000 n 
-0010230171 00000 n 
-0010230545 00000 n 
-0010230593 00000 n 
-0010249782 00000 n 
-0010250143 00000 n 
-0010259103 00000 n 
-0010259477 00000 n 
-0010259524 00000 n 
-0010259571 00000 n 
-0010260056 00000 n 
-0010270251 00000 n 
-0010270612 00000 n 
-0010270660 00000 n 
-0010270708 00000 n 
-0010270756 00000 n 
-0010273669 00000 n 
-0010274049 00000 n 
-0010274097 00000 n 
-0010274293 00000 n 
-0010274341 00000 n 
-0010274731 00000 n 
-0010275079 00000 n 
-0010275127 00000 n 
-0010287960 00000 n 
-0010288398 00000 n 
-0010288446 00000 n 
-0010288634 00000 n 
-0010288683 00000 n 
-0010288947 00000 n 
-0010289071 00000 n 
-0010289335 00000 n 
-0010289384 00000 n 
-0010289571 00000 n 
-0010289620 00000 n 
-0010289805 00000 n 
-0010289854 00000 n 
-0010294197 00000 n 
-0010294577 00000 n 
-0010294625 00000 n 
-0010294673 00000 n 
-0010294937 00000 n 
-0010298305 00000 n 
-0010298685 00000 n 
-0010298733 00000 n 
-0010298918 00000 n 
-0010299306 00000 n 
-0010299654 00000 n 
-0010299702 00000 n 
-0010300213 00000 n 
-0010312129 00000 n 
-0010312540 00000 n 
-0010312588 00000 n 
-0010312764 00000 n 
-0010312930 00000 n 
-0010313055 00000 n 
-0010313103 00000 n 
-0010313151 00000 n 
-0010326830 00000 n 
-0010327238 00000 n 
-0010327286 00000 n 
-0010327506 00000 n 
-0010347407 00000 n 
-0010347831 00000 n 
-0010347974 00000 n 
-0010348021 00000 n 
-0010348069 00000 n 
-0010348238 00000 n 
-0010348423 00000 n 
-0010374014 00000 n 
-0010374412 00000 n 
-0010374619 00000 n 
-0010374827 00000 n 
-0010375034 00000 n 
-0010393176 00000 n 
-0010393537 00000 n 
-0010408229 00000 n 
-0010408636 00000 n 
-0010408841 00000 n 
-0010409046 00000 n 
-0010409249 00000 n 
-0010409453 00000 n 
-0010417825 00000 n 
-0010418186 00000 n 
-0010426539 00000 n 
-0010426937 00000 n 
-0010427145 00000 n 
-0010427355 00000 n 
-0010427564 00000 n 
-0010441779 00000 n 
-0010442181 00000 n 
-0010442377 00000 n 
-0010442573 00000 n 
-0010459480 00000 n 
-0010459887 00000 n 
-0010459937 00000 n 
-0010460070 00000 n 
-0010460120 00000 n 
-0010470711 00000 n 
-0010471085 00000 n 
-0010471133 00000 n 
-0010471181 00000 n 
-0010482274 00000 n 
-0010482712 00000 n 
-0010482760 00000 n 
-0010483258 00000 n 
-0010483306 00000 n 
-0010483434 00000 n 
-0010483619 00000 n 
-0010483789 00000 n 
-0010483914 00000 n 
-0010484041 00000 n 
-0010484169 00000 n 
-0010484217 00000 n 
-0010496143 00000 n 
-0010496626 00000 n 
-0010496675 00000 n 
-0010496803 00000 n 
-0010496852 00000 n 
-0010496978 00000 n 
-0010497108 00000 n 
-0010497157 00000 n 
-0010497282 00000 n 
-0010497406 00000 n 
-0010497540 00000 n 
-0010497674 00000 n 
-0010497809 00000 n 
-0010497932 00000 n 
-0010498068 00000 n 
-0010498198 00000 n 
-0010503773 00000 n 
-0010504203 00000 n 
-0010504251 00000 n 
-0010504374 00000 n 
-0010504422 00000 n 
-0010504548 00000 n 
-0010504668 00000 n 
-0010504716 00000 n 
-0010504842 00000 n 
-0010504964 00000 n 
-0010505012 00000 n 
-0010505133 00000 n 
-0010505257 00000 n 
-0010505305 00000 n 
-0010505429 00000 n 
-0010516589 00000 n 
-0010516963 00000 n 
-0010517011 00000 n 
-0010517059 00000 n 
-0010517107 00000 n 
-0010530353 00000 n 
-0010530727 00000 n 
-0010530775 00000 n 
-0010544073 00000 n 
-0010544434 00000 n 
-0010544482 00000 n 
-0010555972 00000 n 
-0010556346 00000 n 
-0010556394 00000 n 
-0010556442 00000 n 
-0010556490 00000 n 
-0010556538 00000 n 
-0010564532 00000 n 
-0010564893 00000 n 
-0010564941 00000 n 
-0010564990 00000 n 
-0010565039 00000 n 
-0010586203 00000 n 
-0010586577 00000 n 
-0010623977 00000 n 
-0010624325 00000 n 
-0010661992 00000 n 
-0010662340 00000 n 
-0010694929 00000 n 
-0010695277 00000 n 
-0010707267 00000 n 
-0010707615 00000 n 
-0010718819 00000 n 
-0010719257 00000 n 
-0010719305 00000 n 
-0010719816 00000 n 
-0010719965 00000 n 
-0010720162 00000 n 
-0010720297 00000 n 
-0010720434 00000 n 
-0010720573 00000 n 
-0010720715 00000 n 
-0010726101 00000 n 
-0010726503 00000 n 
-0010767160 00000 n 
-0010794923 00000 n 
-0010803400 00000 n 
-0010803803 00000 n 
-0010849844 00000 n 
-0010850041 00000 n 
-0010850220 00000 n 
-0010868700 00000 n 
-0010869106 00000 n 
-0010869154 00000 n 
-0010869337 00000 n 
-0010869385 00000 n 
-0010903761 00000 n 
-0010904135 00000 n 
-0010935365 00000 n 
-0010935776 00000 n 
-0010935969 00000 n 
-0010936161 00000 n 
-0010936372 00000 n 
-0010936420 00000 n 
-0010936468 00000 n 
-0010951109 00000 n 
-0010951525 00000 n 
-0010951724 00000 n 
-0010951862 00000 n 
-0010951912 00000 n 
-0010952112 00000 n 
-0010952256 00000 n 
-0010952306 00000 n 
-0010952444 00000 n 
-0010952494 00000 n 
-0010966343 00000 n 
-0010966758 00000 n 
-0010966890 00000 n 
-0010967032 00000 n 
-0010967080 00000 n 
-0010967129 00000 n 
-0010967178 00000 n 
-0010980385 00000 n 
-0010980759 00000 n 
-0010980808 00000 n 
-0010989482 00000 n 
-0010989843 00000 n 
-0010997678 00000 n 
-0010998052 00000 n 
-0010998100 00000 n 
-0010999429 00000 n 
-0010999805 00000 n 
-0010999853 00000 n 
-0010999901 00000 n 
-0011000069 00000 n 
-0011000117 00000 n 
-0011000298 00000 n 
-0011003254 00000 n 
-0011003648 00000 n 
-0011003696 00000 n 
-0011003881 00000 n 
-0011004074 00000 n 
-0011004251 00000 n 
-0011004427 00000 n 
-0011011630 00000 n 
-0011012005 00000 n 
-0011012053 00000 n 
-0011012101 00000 n 
-0011012149 00000 n 
-0011038036 00000 n 
-0011042599 00000 n 
-0011042648 00000 n 
-0011042697 00000 n 
-0011042746 00000 n 
-0011050664 00000 n 
-0011051025 00000 n 
-0011051073 00000 n 
-0011097841 00000 n 
-0011104654 00000 n 
-0011105016 00000 n 
-0011105064 00000 n 
-0011115013 00000 n 
-0011115374 00000 n 
-0011115422 00000 n 
-0011115470 00000 n 
-0011127742 00000 n 
-0011128103 00000 n 
-0011128151 00000 n 
-0011141903 00000 n 
-0011142264 00000 n 
-0011142312 00000 n 
-0011142360 00000 n 
-0011142408 00000 n 
-0011160341 00000 n 
-0011160689 00000 n 
-0011160737 00000 n 
-0011173202 00000 n 
-0011173654 00000 n 
-0011173702 00000 n 
-0011173750 00000 n 
-0011173890 00000 n 
-0011174017 00000 n 
-0011174167 00000 n 
-0011174304 00000 n 
-0011174352 00000 n 
-0011174484 00000 n 
-0011174531 00000 n 
-0011174658 00000 n 
-0011174783 00000 n 
-0011174831 00000 n 
-0011174959 00000 n 
-0011175173 00000 n 
-0011185452 00000 n 
-0011185832 00000 n 
-0011185880 00000 n 
-0011186016 00000 n 
-0011194424 00000 n 
-0011194948 00000 n 
-0011194996 00000 n 
-0011195044 00000 n 
-0011195329 00000 n 
-0011195536 00000 n 
-0011195820 00000 n 
-0011196102 00000 n 
-0011196359 00000 n 
-0011196408 00000 n 
-0011196698 00000 n 
-0011196926 00000 n 
-0011197170 00000 n 
-0011197219 00000 n 
-0011197412 00000 n 
-0011197622 00000 n 
-0011197835 00000 n 
-0011197884 00000 n 
-0011198076 00000 n 
-0011198309 00000 n 
-0011198506 00000 n 
-0011198691 00000 n 
-0011198740 00000 n 
-0011199170 00000 n 
-0011199356 00000 n 
-0011199549 00000 n 
-0011199598 00000 n 
-0011199790 00000 n 
-0011201776 00000 n 
-0011202143 00000 n 
-0011202191 00000 n 
-0011202385 00000 n 
-0011205759 00000 n 
-0011206135 00000 n 
-0011206183 00000 n 
-0011206558 00000 n 
-0011206606 00000 n 
-0011206789 00000 n 
-0011206837 00000 n 
-0011207030 00000 n 
-0011210646 00000 n 
-0011211085 00000 n 
-0011211133 00000 n 
-0011215393 00000 n 
-0011215923 00000 n 
-0011216117 00000 n 
-0011216301 00000 n 
-0011216494 00000 n 
-0011216691 00000 n 
-0011216886 00000 n 
-0011217072 00000 n 
-0011241297 00000 n 
-0011241726 00000 n 
-0011241774 00000 n 
-0011241965 00000 n 
-0011242145 00000 n 
-0011242193 00000 n 
-0011242372 00000 n 
-0011242622 00000 n 
-0011242804 00000 n 
-0011249197 00000 n 
-0011249545 00000 n 
-0011279408 00000 n 
-0011279782 00000 n 
-0011279830 00000 n 
-0011300558 00000 n 
-0011300919 00000 n 
-0011300967 00000 n 
-0011311015 00000 n 
-0011311436 00000 n 
-0011311484 00000 n 
-0011311678 00000 n 
-0011311898 00000 n 
-0011312115 00000 n 
-0011312331 00000 n 
-0011312562 00000 n 
-0011312610 00000 n 
-0011312658 00000 n 
-0011312706 00000 n 
-0011312937 00000 n 
-0011313195 00000 n 
-0011313243 00000 n 
-0011313291 00000 n 
-0011327200 00000 n 
-0011327587 00000 n 
-0011327636 00000 n 
-0011327685 00000 n 
-0011327734 00000 n 
-0011335704 00000 n 
-0011336065 00000 n 
-0011336114 00000 n 
-0011336163 00000 n 
-0011336212 00000 n 
-0011336261 00000 n 
-0011336310 00000 n 
-0011348063 00000 n 
-0011348450 00000 n 
-0011348499 00000 n 
-0011348618 00000 n 
-0011348740 00000 n 
-0011348869 00000 n 
-0011348999 00000 n 
-0011349124 00000 n 
-0011349251 00000 n 
-0011349374 00000 n 
-0011349499 00000 n 
-0011349626 00000 n 
-0011349753 00000 n 
-0011349886 00000 n 
-0011350019 00000 n 
-0011350151 00000 n 
-0011350284 00000 n 
-0011350412 00000 n 
-0011350541 00000 n 
-0011350662 00000 n 
-0011350783 00000 n 
-0011350909 00000 n 
-0011351035 00000 n 
-0011351163 00000 n 
-0011351291 00000 n 
-0011351429 00000 n 
-0011351567 00000 n 
-0011351691 00000 n 
-0011351815 00000 n 
-0011351938 00000 n 
-0011352061 00000 n 
-0011352191 00000 n 
-0011352321 00000 n 
-0011352448 00000 n 
-0011352575 00000 n 
-0011352693 00000 n 
-0011352812 00000 n 
-0011352935 00000 n 
-0011353058 00000 n 
-0011353213 00000 n 
-0011353368 00000 n 
-0011353507 00000 n 
-0011353647 00000 n 
-0011353806 00000 n 
-0011353966 00000 n 
-0011354110 00000 n 
-0011354256 00000 n 
-0011354382 00000 n 
-0011354509 00000 n 
-0011354631 00000 n 
-0011354755 00000 n 
-0011354883 00000 n 
-0011355013 00000 n 
-0011355140 00000 n 
-0011355268 00000 n 
-0011355390 00000 n 
-0011355514 00000 n 
-0011355633 00000 n 
-0011355753 00000 n 
-0011355866 00000 n 
-0011355984 00000 n 
-0011356110 00000 n 
-0011356237 00000 n 
-0011356355 00000 n 
-0011356475 00000 n 
-0011356610 00000 n 
-0011356746 00000 n 
-0011356868 00000 n 
-0011356991 00000 n 
-0011357112 00000 n 
-0011357234 00000 n 
-0011357365 00000 n 
-0011357498 00000 n 
-0011357617 00000 n 
-0011357737 00000 n 
-0011357853 00000 n 
-0011357970 00000 n 
-0011358088 00000 n 
-0011358207 00000 n 
-0011358335 00000 n 
-0011358465 00000 n 
-0011358606 00000 n 
-0011358748 00000 n 
-0011358895 00000 n 
-0011359044 00000 n 
-0011359171 00000 n 
-0011359299 00000 n 
-0011359426 00000 n 
-0011359554 00000 n 
-0011359683 00000 n 
-0011359813 00000 n 
-0011359946 00000 n 
-0011360080 00000 n 
-0011360206 00000 n 
-0011360333 00000 n 
-0011360450 00000 n 
-0011360568 00000 n 
-0011360697 00000 n 
-0011360827 00000 n 
-0011360957 00000 n 
-0011361089 00000 n 
-0011361214 00000 n 
-0011361340 00000 n 
-0011361472 00000 n 
-0011361605 00000 n 
-0011361729 00000 n 
-0011361854 00000 n 
-0011361980 00000 n 
-0011362108 00000 n 
-0011362231 00000 n 
-0011362355 00000 n 
-0011362494 00000 n 
-0011362634 00000 n 
-0011362769 00000 n 
-0011362906 00000 n 
-0011363048 00000 n 
-0011363191 00000 n 
-0011363355 00000 n 
-0011363520 00000 n 
-0011363676 00000 n 
-0011363833 00000 n 
-0011363965 00000 n 
-0011364098 00000 n 
-0011364220 00000 n 
-0011364343 00000 n 
-0011364473 00000 n 
-0011364605 00000 n 
-0011364742 00000 n 
-0011364880 00000 n 
-0011365010 00000 n 
-0011365141 00000 n 
-0011365263 00000 n 
-0011365387 00000 n 
-0011365509 00000 n 
-0011365632 00000 n 
-0011365784 00000 n 
-0011365937 00000 n 
-0011366073 00000 n 
-0011366210 00000 n 
-0011366350 00000 n 
-0011366491 00000 n 
-0011366637 00000 n 
-0011366784 00000 n 
-0011366935 00000 n 
-0011367087 00000 n 
-0011367229 00000 n 
-0011367372 00000 n 
-0011367509 00000 n 
-0011367647 00000 n 
-0011367772 00000 n 
-0011367899 00000 n 
-0011368025 00000 n 
-0011368153 00000 n 
-0011368279 00000 n 
-0011368406 00000 n 
-0011368538 00000 n 
-0011368671 00000 n 
-0011368796 00000 n 
-0011368922 00000 n 
-0011369053 00000 n 
-0011369185 00000 n 
-0011369315 00000 n 
-0011369447 00000 n 
-0011369573 00000 n 
-0011369700 00000 n 
-0011369827 00000 n 
-0011369956 00000 n 
-0011370078 00000 n 
-0011370202 00000 n 
-0011370345 00000 n 
-0011370489 00000 n 
-0011370611 00000 n 
-0011370735 00000 n 
-0011370859 00000 n 
-0011370984 00000 n 
-0011371106 00000 n 
-0011371229 00000 n 
-0011371355 00000 n 
-0011371483 00000 n 
-0011371601 00000 n 
-0011371720 00000 n 
-0011371839 00000 n 
-0011371960 00000 n 
-0011372074 00000 n 
-0011372190 00000 n 
-0011372306 00000 n 
-0011372424 00000 n 
-0011372542 00000 n 
-0011372662 00000 n 
-0011372782 00000 n 
-0011372903 00000 n 
-0011373022 00000 n 
-0011373143 00000 n 
-0011373279 00000 n 
-0011373416 00000 n 
-0011373534 00000 n 
-0011373654 00000 n 
-0011373778 00000 n 
-0011373904 00000 n 
-0011374032 00000 n 
-0011374162 00000 n 
-0011374284 00000 n 
-0011374408 00000 n 
-0011374541 00000 n 
-0011374675 00000 n 
-0011374791 00000 n 
-0011374908 00000 n 
-0011375042 00000 n 
-0011375177 00000 n 
-0011375312 00000 n 
-0011375448 00000 n 
-0011375571 00000 n 
-0011375696 00000 n 
-0011375820 00000 n 
-0011375945 00000 n 
-0011376097 00000 n 
-0011376250 00000 n 
-0011376392 00000 n 
-0011376536 00000 n 
-0011376661 00000 n 
-0011376787 00000 n 
-0011376908 00000 n 
-0011377030 00000 n 
-0011377155 00000 n 
-0011377282 00000 n 
-0011377397 00000 n 
-0011377515 00000 n 
-0011377648 00000 n 
-0011377782 00000 n 
-0011377910 00000 n 
-0011378039 00000 n 
-0011378164 00000 n 
-0011378290 00000 n 
-0011378416 00000 n 
-0011378543 00000 n 
-0011378668 00000 n 
-0011378795 00000 n 
-0011378920 00000 n 
-0011379046 00000 n 
-0011379171 00000 n 
-0011379297 00000 n 
-0011379418 00000 n 
-0011379540 00000 n 
-0011379661 00000 n 
-0011379784 00000 n 
-0011379919 00000 n 
-0011380055 00000 n 
-0011380183 00000 n 
-0011380312 00000 n 
-0011380432 00000 n 
-0011380554 00000 n 
-0011380683 00000 n 
-0011380813 00000 n 
-0011380938 00000 n 
-0011381064 00000 n 
-0011381195 00000 n 
-0011381327 00000 n 
-0011381454 00000 n 
-0011381582 00000 n 
-0011381708 00000 n 
-0011381837 00000 n 
-0011381967 00000 n 
-0011382099 00000 n 
-0011382228 00000 n 
-0011382359 00000 n 
-0011382488 00000 n 
-0011382618 00000 n 
-0011382742 00000 n 
-0011382867 00000 n 
-0011382994 00000 n 
-0011383123 00000 n 
-0011383254 00000 n 
-0011383386 00000 n 
-0011383510 00000 n 
-0011383636 00000 n 
-0011383766 00000 n 
-0011383897 00000 n 
-0011384050 00000 n 
-0011384204 00000 n 
-0011384331 00000 n 
-0011384460 00000 n 
-0011384587 00000 n 
-0011384715 00000 n 
-0011384846 00000 n 
-0011384978 00000 n 
-0011385106 00000 n 
-0011385235 00000 n 
-0011385381 00000 n 
-0011385528 00000 n 
-0011385652 00000 n 
-0011385777 00000 n 
-0011385902 00000 n 
-0011386028 00000 n 
-0011386162 00000 n 
-0011386297 00000 n 
-0011386428 00000 n 
-0011386561 00000 n 
-0011386695 00000 n 
-0011386831 00000 n 
-0011386952 00000 n 
-0011387074 00000 n 
-0011387193 00000 n 
-0011387313 00000 n 
-0011387440 00000 n 
-0011387568 00000 n 
-0011387696 00000 n 
-0011387826 00000 n 
-0011387953 00000 n 
-0011388081 00000 n 
-0011388208 00000 n 
-0011388337 00000 n 
-0011388469 00000 n 
-0011388603 00000 n 
-0011388763 00000 n 
-0011388924 00000 n 
-0011389047 00000 n 
-0011389172 00000 n 
-0011389298 00000 n 
-0011389426 00000 n 
-0011389554 00000 n 
-0011389683 00000 n 
-0011389807 00000 n 
-0011389932 00000 n 
-0011390056 00000 n 
-0011390181 00000 n 
-0011390301 00000 n 
-0011390423 00000 n 
-0011390546 00000 n 
-0011390670 00000 n 
-0011390799 00000 n 
-0011390930 00000 n 
-0011391049 00000 n 
-0011391169 00000 n 
-0011391286 00000 n 
-0011391405 00000 n 
-0011391524 00000 n 
-0011391644 00000 n 
-0011391766 00000 n 
-0011391890 00000 n 
-0011392019 00000 n 
-0011392149 00000 n 
-0011392276 00000 n 
-0011392404 00000 n 
-0011392527 00000 n 
-0011392696 00000 n 
-0011392821 00000 n 
-0011392945 00000 n 
-0011393070 00000 n 
-0011393196 00000 n 
-0011393320 00000 n 
-0011393445 00000 n 
-0011393569 00000 n 
-0011393694 00000 n 
-0011393812 00000 n 
-0011393932 00000 n 
-0011394052 00000 n 
-0011394174 00000 n 
-0011394294 00000 n 
-0011394415 00000 n 
-0011394575 00000 n 
-0011394736 00000 n 
-0011394857 00000 n 
-0011394980 00000 n 
-0011395104 00000 n 
-0011395229 00000 n 
-0011395352 00000 n 
-0011395476 00000 n 
-0011395623 00000 n 
-0011395771 00000 n 
-0011395897 00000 n 
-0011396024 00000 n 
-0011396146 00000 n 
-0011396270 00000 n 
-0011396392 00000 n 
-0011396516 00000 n 
-0011396645 00000 n 
-0011396775 00000 n 
-0011396912 00000 n 
-0011397050 00000 n 
-0011397171 00000 n 
-0011397294 00000 n 
-0011397445 00000 n 
-0011397598 00000 n 
-0011397715 00000 n 
-0011397833 00000 n 
-0011397959 00000 n 
-0011398087 00000 n 
-0011398220 00000 n 
-0011398354 00000 n 
-0011398478 00000 n 
-0011398604 00000 n 
-0011398743 00000 n 
-0011398884 00000 n 
-0011399001 00000 n 
-0011399119 00000 n 
-0011399237 00000 n 
-0011399356 00000 n 
-0011399483 00000 n 
-0011399612 00000 n 
-0011399736 00000 n 
-0011399861 00000 n 
-0011399988 00000 n 
-0011400116 00000 n 
-0011400232 00000 n 
-0011400349 00000 n 
-0011400465 00000 n 
-0011400582 00000 n 
-0011400701 00000 n 
-0011400821 00000 n 
-0011400963 00000 n 
-0011401106 00000 n 
-0011401240 00000 n 
-0011401375 00000 n 
-0011401497 00000 n 
-0011401621 00000 n 
-0011401893 00000 n 
-0011402165 00000 n 
-0011402247 00000 n 
-0011402479 00000 n 
-0011402639 00000 n 
-0011402795 00000 n 
-0011403014 00000 n 
-0011403219 00000 n 
-0011403496 00000 n 
-0011403760 00000 n 
-0011403994 00000 n 
-0011404243 00000 n 
-0011404588 00000 n 
-0011404921 00000 n 
-0011405178 00000 n 
-0011405439 00000 n 
-0011405724 00000 n 
-0011405970 00000 n 
-0011406166 00000 n 
-0011406480 00000 n 
-0011406694 00000 n 
-0011406942 00000 n 
-0011407180 00000 n 
-0011407521 00000 n 
-0011407798 00000 n 
-0011408155 00000 n 
-0011408456 00000 n 
-0011408666 00000 n 
-0011408867 00000 n 
-0011409089 00000 n 
-0011409318 00000 n 
-0011409531 00000 n 
-0011409728 00000 n 
-0011409917 00000 n 
-0011410146 00000 n 
-0011410343 00000 n 
-0011410604 00000 n 
-0011410813 00000 n 
-0011411030 00000 n 
-0011411267 00000 n 
-0011411464 00000 n 
-0011411642 00000 n 
-0011411894 00000 n 
-0011412116 00000 n 
-0011412386 00000 n 
-0011412683 00000 n 
-0011412973 00000 n 
-0011413202 00000 n 
-0011413451 00000 n 
-0011413704 00000 n 
-0011413901 00000 n 
-0011414150 00000 n 
-0011414411 00000 n 
-0011414761 00000 n 
-0011414983 00000 n 
-0011415265 00000 n 
-0011415639 00000 n 
-0011415854 00000 n 
-0011416092 00000 n 
-0011416395 00000 n 
-0011416661 00000 n 
-0011416951 00000 n 
-0011417329 00000 n 
-0011417675 00000 n 
-0011417925 00000 n 
-0011418175 00000 n 
-0011418449 00000 n 
-0011418815 00000 n 
-0011419077 00000 n 
-0011419276 00000 n 
-0011419521 00000 n 
-0011419844 00000 n 
-0011420234 00000 n 
-0011420556 00000 n 
-0011420870 00000 n 
-0011421196 00000 n 
-0011421486 00000 n 
-0011421769 00000 n 
-0011421979 00000 n 
-0011422174 00000 n 
-0011422408 00000 n 
-0011422610 00000 n 
-0011422876 00000 n 
-0011423078 00000 n 
-0011423304 00000 n 
-0011423510 00000 n 
-0011423736 00000 n 
-0011423930 00000 n 
-0011424268 00000 n 
-0011424567 00000 n 
-0011424796 00000 n 
-0011424976 00000 n 
-0011425241 00000 n 
-0011425420 00000 n 
-0011425622 00000 n 
-0011425900 00000 n 
-0011426238 00000 n 
-0011426436 00000 n 
-0011426623 00000 n 
-0011426904 00000 n 
-0011427112 00000 n 
-0011427333 00000 n 
-0011427540 00000 n 
-0011427778 00000 n 
-0011427992 00000 n 
-0011428231 00000 n 
-0011428492 00000 n 
-0011428735 00000 n 
-0011428997 00000 n 
-0011429255 00000 n 
-0011429465 00000 n 
-0011429795 00000 n 
-0011430074 00000 n 
-0011430360 00000 n 
-0011430587 00000 n 
-0011430793 00000 n 
-0011430987 00000 n 
-0011431245 00000 n 
-0011431459 00000 n 
-0011431689 00000 n 
-0011431955 00000 n 
-0011432201 00000 n 
-0011432455 00000 n 
-0011432713 00000 n 
-0011432911 00000 n 
-0011433133 00000 n 
-0011433439 00000 n 
-0011433654 00000 n 
-0011433984 00000 n 
-0011434223 00000 n 
-0011434421 00000 n 
-0011434639 00000 n 
-0011434841 00000 n 
-0011435047 00000 n 
-0011435265 00000 n 
-0011435479 00000 n 
-0011435689 00000 n 
-0011435919 00000 n 
-0011436125 00000 n 
-0011436343 00000 n 
-0011436565 00000 n 
-0011436871 00000 n 
-0011437209 00000 n 
-0011437447 00000 n 
-0011437761 00000 n 
-0011437991 00000 n 
-0011438261 00000 n 
-0011438571 00000 n 
-0011438778 00000 n 
-0011439039 00000 n 
-0011439238 00000 n 
-0011439472 00000 n 
-0011439747 00000 n 
-0011440049 00000 n 
-0011440316 00000 n 
-0011440566 00000 n 
-0011440808 00000 n 
-0011441042 00000 n 
-0011441288 00000 n 
-0011441546 00000 n 
-0011441912 00000 n 
-0011442142 00000 n 
-0011442384 00000 n 
-0011442762 00000 n 
-0011443084 00000 n 
-0011443314 00000 n 
-0011443565 00000 n 
-0011443871 00000 n 
-0011444102 00000 n 
-0011444384 00000 n 
-0011444582 00000 n 
-0011444848 00000 n 
-0011445118 00000 n 
-0011445412 00000 n 
-0011445738 00000 n 
-0011446020 00000 n 
-0011446222 00000 n 
-0011446469 00000 n 
-0011446754 00000 n 
-0011446941 00000 n 
-0011447151 00000 n 
-0011447357 00000 n 
-0011447708 00000 n 
-0011447937 00000 n 
-0011448121 00000 n 
-0011448318 00000 

<TRUNCATED>

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

Posted by gi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
index a31c60b..f04095f 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
@@ -592,136 +592,145 @@
 <span class="sourceLineNo">584</span>   * @return Returns L2 block cache instance (for now it is BucketCache BlockCache all the time)<a name="line.584"></a>
 <span class="sourceLineNo">585</span>   * or null if not supposed to be a L2.<a name="line.585"></a>
 <span class="sourceLineNo">586</span>   */<a name="line.586"></a>
-<span class="sourceLineNo">587</span>  private static BlockCache getL2(final Configuration c) {<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    final boolean useExternal = c.getBoolean(EXTERNAL_BLOCKCACHE_KEY, EXTERNAL_BLOCKCACHE_DEFAULT);<a name="line.588"></a>
-<span class="sourceLineNo">589</span>    if (LOG.isDebugEnabled()) {<a name="line.589"></a>
-<span class="sourceLineNo">590</span>      LOG.debug("Trying to use " + (useExternal?" External":" Internal") + " l2 cache");<a name="line.590"></a>
-<span class="sourceLineNo">591</span>    }<a name="line.591"></a>
-<span class="sourceLineNo">592</span><a name="line.592"></a>
-<span class="sourceLineNo">593</span>    // If we want to use an external block cache then create that.<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    if (useExternal) {<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      return getExternalBlockcache(c);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }<a name="line.596"></a>
-<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">587</span>  @VisibleForTesting<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  static BlockCache getL2(final Configuration c) {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    final boolean useExternal = c.getBoolean(EXTERNAL_BLOCKCACHE_KEY, EXTERNAL_BLOCKCACHE_DEFAULT);<a name="line.589"></a>
+<span class="sourceLineNo">590</span>    if (LOG.isDebugEnabled()) {<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      LOG.debug("Trying to use " + (useExternal?" External":" Internal") + " l2 cache");<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>    // If we want to use an external block cache then create that.<a name="line.594"></a>
+<span class="sourceLineNo">595</span>    if (useExternal) {<a name="line.595"></a>
+<span class="sourceLineNo">596</span>      return getExternalBlockcache(c);<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    }<a name="line.597"></a>
 <span class="sourceLineNo">598</span>    // otherwise use the bucket cache.<a name="line.598"></a>
 <span class="sourceLineNo">599</span>    return getBucketCache(c);<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>  private static BlockCache getExternalBlockcache(Configuration c) {<a name="line.603"></a>
-<span class="sourceLineNo">604</span>    Class klass = null;<a name="line.604"></a>
-<span class="sourceLineNo">605</span><a name="line.605"></a>
-<span class="sourceLineNo">606</span>    // Get the class, from the config. s<a name="line.606"></a>
-<span class="sourceLineNo">607</span>    try {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>      klass = ExternalBlockCaches.valueOf(c.get(EXTERNAL_BLOCKCACHE_CLASS_KEY, "memcache")).clazz;<a name="line.608"></a>
-<span class="sourceLineNo">609</span>    } catch (IllegalArgumentException exception) {<a name="line.609"></a>
-<span class="sourceLineNo">610</span>      try {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>        klass = c.getClass(EXTERNAL_BLOCKCACHE_CLASS_KEY, Class.forName(<a name="line.611"></a>
-<span class="sourceLineNo">612</span>            "org.apache.hadoop.hbase.io.hfile.MemcachedBlockCache"));<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      } catch (ClassNotFoundException e) {<a name="line.613"></a>
-<span class="sourceLineNo">614</span>        return null;<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    }<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>    // Now try and create an instance of the block cache.<a name="line.618"></a>
-<span class="sourceLineNo">619</span>    try {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>      LOG.info("Creating external block cache of type: " + klass);<a name="line.620"></a>
-<span class="sourceLineNo">621</span>      return (BlockCache) ReflectionUtils.newInstance(klass, c);<a name="line.621"></a>
-<span class="sourceLineNo">622</span>    } catch (Exception e) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>      LOG.warn("Error creating external block cache", e);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>    }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>    return null;<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>  }<a name="line.627"></a>
-<span class="sourceLineNo">628</span><a name="line.628"></a>
-<span class="sourceLineNo">629</span>  private static BlockCache getBucketCache(Configuration c) {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    // Check for L2.  ioengine name must be non-null.<a name="line.630"></a>
-<span class="sourceLineNo">631</span>    String bucketCacheIOEngineName = c.get(BUCKET_CACHE_IOENGINE_KEY, null);<a name="line.631"></a>
-<span class="sourceLineNo">632</span>    if (bucketCacheIOEngineName == null || bucketCacheIOEngineName.length() &lt;= 0) return null;<a name="line.632"></a>
-<span class="sourceLineNo">633</span><a name="line.633"></a>
-<span class="sourceLineNo">634</span>    int blockSize = c.getInt(BLOCKCACHE_BLOCKSIZE_KEY, HConstants.DEFAULT_BLOCKSIZE);<a name="line.634"></a>
-<span class="sourceLineNo">635</span>    final long bucketCacheSize = MemorySizeUtil.getBucketCacheSize(c);<a name="line.635"></a>
-<span class="sourceLineNo">636</span>    if (bucketCacheSize &lt;= 0) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      throw new IllegalStateException("bucketCacheSize &lt;= 0; Check " +<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        BUCKET_CACHE_SIZE_KEY + " setting and/or server java heap size");<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    }<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    if (c.get("hbase.bucketcache.percentage.in.combinedcache") != null) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      LOG.warn("Configuration 'hbase.bucketcache.percentage.in.combinedcache' is no longer "<a name="line.641"></a>
-<span class="sourceLineNo">642</span>          + "respected. See comments in http://hbase.apache.org/book.html#_changes_of_note");<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    }<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    int writerThreads = c.getInt(BUCKET_CACHE_WRITER_THREADS_KEY,<a name="line.644"></a>
-<span class="sourceLineNo">645</span>      DEFAULT_BUCKET_CACHE_WRITER_THREADS);<a name="line.645"></a>
-<span class="sourceLineNo">646</span>    int writerQueueLen = c.getInt(BUCKET_CACHE_WRITER_QUEUE_KEY,<a name="line.646"></a>
-<span class="sourceLineNo">647</span>      DEFAULT_BUCKET_CACHE_WRITER_QUEUE);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>    String persistentPath = c.get(BUCKET_CACHE_PERSISTENT_PATH_KEY);<a name="line.648"></a>
-<span class="sourceLineNo">649</span>    String[] configuredBucketSizes = c.getStrings(BUCKET_CACHE_BUCKETS_KEY);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>    int [] bucketSizes = null;<a name="line.650"></a>
-<span class="sourceLineNo">651</span>    if (configuredBucketSizes != null) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      bucketSizes = new int[configuredBucketSizes.length];<a name="line.652"></a>
-<span class="sourceLineNo">653</span>      for (int i = 0; i &lt; configuredBucketSizes.length; i++) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        bucketSizes[i] = Integer.parseInt(configuredBucketSizes[i].trim());<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>    }<a name="line.656"></a>
-<span class="sourceLineNo">657</span>    BucketCache bucketCache = null;<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    try {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      int ioErrorsTolerationDuration = c.getInt(<a name="line.659"></a>
-<span class="sourceLineNo">660</span>        "hbase.bucketcache.ioengine.errors.tolerated.duration",<a name="line.660"></a>
-<span class="sourceLineNo">661</span>        BucketCache.DEFAULT_ERROR_TOLERATION_DURATION);<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      // Bucket cache logs its stats on creation internal to the constructor.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      bucketCache = new BucketCache(bucketCacheIOEngineName,<a name="line.663"></a>
-<span class="sourceLineNo">664</span>        bucketCacheSize, blockSize, bucketSizes, writerThreads, writerQueueLen, persistentPath,<a name="line.664"></a>
-<span class="sourceLineNo">665</span>        ioErrorsTolerationDuration);<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    } catch (IOException ioex) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      LOG.error("Can't instantiate bucket cache", ioex); throw new RuntimeException(ioex);<a name="line.667"></a>
-<span class="sourceLineNo">668</span>    }<a name="line.668"></a>
-<span class="sourceLineNo">669</span>    return bucketCache;<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>  /**<a name="line.672"></a>
-<span class="sourceLineNo">673</span>   * Returns the block cache or &lt;code&gt;null&lt;/code&gt; in case none should be used.<a name="line.673"></a>
-<span class="sourceLineNo">674</span>   * Sets GLOBAL_BLOCK_CACHE_INSTANCE<a name="line.674"></a>
-<span class="sourceLineNo">675</span>   *<a name="line.675"></a>
-<span class="sourceLineNo">676</span>   * @param conf  The current configuration.<a name="line.676"></a>
-<span class="sourceLineNo">677</span>   * @return The block cache or &lt;code&gt;null&lt;/code&gt;.<a name="line.677"></a>
-<span class="sourceLineNo">678</span>   */<a name="line.678"></a>
-<span class="sourceLineNo">679</span>  public static synchronized BlockCache instantiateBlockCache(Configuration conf) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>    if (GLOBAL_BLOCK_CACHE_INSTANCE != null) return GLOBAL_BLOCK_CACHE_INSTANCE;<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    if (blockCacheDisabled) return null;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    LruBlockCache l1 = getL1Internal(conf);<a name="line.682"></a>
-<span class="sourceLineNo">683</span>    // blockCacheDisabled is set as a side-effect of getL1Internal(), so check it again after the call.<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    if (blockCacheDisabled) return null;<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    BlockCache l2 = getL2(conf);<a name="line.685"></a>
-<span class="sourceLineNo">686</span>    if (l2 == null) {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      GLOBAL_BLOCK_CACHE_INSTANCE = l1;<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    } else {<a name="line.688"></a>
-<span class="sourceLineNo">689</span>      boolean useExternal = conf.getBoolean(EXTERNAL_BLOCKCACHE_KEY, EXTERNAL_BLOCKCACHE_DEFAULT);<a name="line.689"></a>
-<span class="sourceLineNo">690</span>      boolean combinedWithLru = conf.getBoolean(BUCKET_CACHE_COMBINED_KEY,<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        DEFAULT_BUCKET_CACHE_COMBINED);<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      if (useExternal) {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>        GLOBAL_BLOCK_CACHE_INSTANCE = new InclusiveCombinedBlockCache(l1, l2);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>      } else {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>        if (combinedWithLru) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>          GLOBAL_BLOCK_CACHE_INSTANCE = new CombinedBlockCache(l1, l2);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        } else {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>          // L1 and L2 are not 'combined'.  They are connected via the LruBlockCache victimhandler<a name="line.698"></a>
-<span class="sourceLineNo">699</span>          // mechanism.  It is a little ugly but works according to the following: when the<a name="line.699"></a>
-<span class="sourceLineNo">700</span>          // background eviction thread runs, blocks evicted from L1 will go to L2 AND when we get<a name="line.700"></a>
-<span class="sourceLineNo">701</span>          // a block from the L1 cache, if not in L1, we will search L2.<a name="line.701"></a>
-<span class="sourceLineNo">702</span>          GLOBAL_BLOCK_CACHE_INSTANCE = l1;<a name="line.702"></a>
-<span class="sourceLineNo">703</span>        }<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      }<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      l1.setVictimCache(l2);<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    return GLOBAL_BLOCK_CACHE_INSTANCE;<a name="line.707"></a>
-<span class="sourceLineNo">708</span>  }<a name="line.708"></a>
-<span class="sourceLineNo">709</span><a name="line.709"></a>
-<span class="sourceLineNo">710</span>  // Supposed to use only from tests. Some tests want to reinit the Global block cache instance<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  @VisibleForTesting<a name="line.711"></a>
-<span class="sourceLineNo">712</span>  static synchronized void clearGlobalInstances() {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>    GLOBAL_L1_CACHE_INSTANCE = null;<a name="line.713"></a>
-<span class="sourceLineNo">714</span>    GLOBAL_BLOCK_CACHE_INSTANCE = null;<a name="line.714"></a>
-<span class="sourceLineNo">715</span>  }<a name="line.715"></a>
-<span class="sourceLineNo">716</span>}<a name="line.716"></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>  private static BlockCache getExternalBlockcache(Configuration c) {<a name="line.602"></a>
+<span class="sourceLineNo">603</span>    Class klass = null;<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>    // Get the class, from the config. s<a name="line.605"></a>
+<span class="sourceLineNo">606</span>    try {<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      klass = ExternalBlockCaches.valueOf(c.get(EXTERNAL_BLOCKCACHE_CLASS_KEY, "memcache")).clazz;<a name="line.607"></a>
+<span class="sourceLineNo">608</span>    } catch (IllegalArgumentException exception) {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>      try {<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        klass = c.getClass(EXTERNAL_BLOCKCACHE_CLASS_KEY, Class.forName(<a name="line.610"></a>
+<span class="sourceLineNo">611</span>            "org.apache.hadoop.hbase.io.hfile.MemcachedBlockCache"));<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      } catch (ClassNotFoundException e) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>        return null;<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    }<a name="line.615"></a>
+<span class="sourceLineNo">616</span><a name="line.616"></a>
+<span class="sourceLineNo">617</span>    // Now try and create an instance of the block cache.<a name="line.617"></a>
+<span class="sourceLineNo">618</span>    try {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>      LOG.info("Creating external block cache of type: " + klass);<a name="line.619"></a>
+<span class="sourceLineNo">620</span>      return (BlockCache) ReflectionUtils.newInstance(klass, c);<a name="line.620"></a>
+<span class="sourceLineNo">621</span>    } catch (Exception e) {<a name="line.621"></a>
+<span class="sourceLineNo">622</span>      LOG.warn("Error creating external block cache", e);<a name="line.622"></a>
+<span class="sourceLineNo">623</span>    }<a name="line.623"></a>
+<span class="sourceLineNo">624</span>    return null;<a name="line.624"></a>
+<span class="sourceLineNo">625</span><a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>  private static BlockCache getBucketCache(Configuration c) {<a name="line.628"></a>
+<span class="sourceLineNo">629</span>    // Check for L2.  ioengine name must be non-null.<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    String bucketCacheIOEngineName = c.get(BUCKET_CACHE_IOENGINE_KEY, null);<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    if (bucketCacheIOEngineName == null || bucketCacheIOEngineName.length() &lt;= 0) return null;<a name="line.631"></a>
+<span class="sourceLineNo">632</span><a name="line.632"></a>
+<span class="sourceLineNo">633</span>    int blockSize = c.getInt(BLOCKCACHE_BLOCKSIZE_KEY, HConstants.DEFAULT_BLOCKSIZE);<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    final long bucketCacheSize = MemorySizeUtil.getBucketCacheSize(c);<a name="line.634"></a>
+<span class="sourceLineNo">635</span>    if (bucketCacheSize &lt;= 0) {<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      throw new IllegalStateException("bucketCacheSize &lt;= 0; Check " +<a name="line.636"></a>
+<span class="sourceLineNo">637</span>        BUCKET_CACHE_SIZE_KEY + " setting and/or server java heap size");<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    }<a name="line.638"></a>
+<span class="sourceLineNo">639</span>    if (c.get("hbase.bucketcache.percentage.in.combinedcache") != null) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>      LOG.warn("Configuration 'hbase.bucketcache.percentage.in.combinedcache' is no longer "<a name="line.640"></a>
+<span class="sourceLineNo">641</span>          + "respected. See comments in http://hbase.apache.org/book.html#_changes_of_note");<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    }<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    int writerThreads = c.getInt(BUCKET_CACHE_WRITER_THREADS_KEY,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>      DEFAULT_BUCKET_CACHE_WRITER_THREADS);<a name="line.644"></a>
+<span class="sourceLineNo">645</span>    int writerQueueLen = c.getInt(BUCKET_CACHE_WRITER_QUEUE_KEY,<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      DEFAULT_BUCKET_CACHE_WRITER_QUEUE);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    String persistentPath = c.get(BUCKET_CACHE_PERSISTENT_PATH_KEY);<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    String[] configuredBucketSizes = c.getStrings(BUCKET_CACHE_BUCKETS_KEY);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>    int [] bucketSizes = null;<a name="line.649"></a>
+<span class="sourceLineNo">650</span>    if (configuredBucketSizes != null) {<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      bucketSizes = new int[configuredBucketSizes.length];<a name="line.651"></a>
+<span class="sourceLineNo">652</span>      for (int i = 0; i &lt; configuredBucketSizes.length; i++) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        int bucketSize = Integer.parseInt(configuredBucketSizes[i].trim());<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        if (bucketSize % 256 != 0) {<a name="line.654"></a>
+<span class="sourceLineNo">655</span>          // We need all the bucket sizes to be multiples of 256. Having all the configured bucket<a name="line.655"></a>
+<span class="sourceLineNo">656</span>          // sizes to be multiples of 256 will ensure that the block offsets within buckets,<a name="line.656"></a>
+<span class="sourceLineNo">657</span>          // that are calculated, will also be multiples of 256.<a name="line.657"></a>
+<span class="sourceLineNo">658</span>          // See BucketEntry where offset to each block is represented using 5 bytes (instead of 8<a name="line.658"></a>
+<span class="sourceLineNo">659</span>          // bytes long). We would like to save heap overhead as less as possible.<a name="line.659"></a>
+<span class="sourceLineNo">660</span>          throw new IllegalArgumentException("Illegal value: " + bucketSize + " configured for '"<a name="line.660"></a>
+<span class="sourceLineNo">661</span>              + BUCKET_CACHE_BUCKETS_KEY + "'. All bucket sizes to be multiples of 256");<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        }<a name="line.662"></a>
+<span class="sourceLineNo">663</span>        bucketSizes[i] = bucketSize;<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      }<a name="line.664"></a>
+<span class="sourceLineNo">665</span>    }<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    BucketCache bucketCache = null;<a name="line.666"></a>
+<span class="sourceLineNo">667</span>    try {<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      int ioErrorsTolerationDuration = c.getInt(<a name="line.668"></a>
+<span class="sourceLineNo">669</span>        "hbase.bucketcache.ioengine.errors.tolerated.duration",<a name="line.669"></a>
+<span class="sourceLineNo">670</span>        BucketCache.DEFAULT_ERROR_TOLERATION_DURATION);<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      // Bucket cache logs its stats on creation internal to the constructor.<a name="line.671"></a>
+<span class="sourceLineNo">672</span>      bucketCache = new BucketCache(bucketCacheIOEngineName,<a name="line.672"></a>
+<span class="sourceLineNo">673</span>        bucketCacheSize, blockSize, bucketSizes, writerThreads, writerQueueLen, persistentPath,<a name="line.673"></a>
+<span class="sourceLineNo">674</span>        ioErrorsTolerationDuration);<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    } catch (IOException ioex) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      LOG.error("Can't instantiate bucket cache", ioex); throw new RuntimeException(ioex);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>    }<a name="line.677"></a>
+<span class="sourceLineNo">678</span>    return bucketCache;<a name="line.678"></a>
+<span class="sourceLineNo">679</span>  }<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>   * Returns the block cache or &lt;code&gt;null&lt;/code&gt; in case none should be used.<a name="line.682"></a>
+<span class="sourceLineNo">683</span>   * Sets GLOBAL_BLOCK_CACHE_INSTANCE<a name="line.683"></a>
+<span class="sourceLineNo">684</span>   *<a name="line.684"></a>
+<span class="sourceLineNo">685</span>   * @param conf  The current configuration.<a name="line.685"></a>
+<span class="sourceLineNo">686</span>   * @return The block cache or &lt;code&gt;null&lt;/code&gt;.<a name="line.686"></a>
+<span class="sourceLineNo">687</span>   */<a name="line.687"></a>
+<span class="sourceLineNo">688</span>  public static synchronized BlockCache instantiateBlockCache(Configuration conf) {<a name="line.688"></a>
+<span class="sourceLineNo">689</span>    if (GLOBAL_BLOCK_CACHE_INSTANCE != null) return GLOBAL_BLOCK_CACHE_INSTANCE;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>    if (blockCacheDisabled) return null;<a name="line.690"></a>
+<span class="sourceLineNo">691</span>    LruBlockCache l1 = getL1Internal(conf);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>    // blockCacheDisabled is set as a side-effect of getL1Internal(), so check it again after the call.<a name="line.692"></a>
+<span class="sourceLineNo">693</span>    if (blockCacheDisabled) return null;<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    BlockCache l2 = getL2(conf);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (l2 == null) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      GLOBAL_BLOCK_CACHE_INSTANCE = l1;<a name="line.696"></a>
+<span class="sourceLineNo">697</span>    } else {<a name="line.697"></a>
+<span class="sourceLineNo">698</span>      boolean useExternal = conf.getBoolean(EXTERNAL_BLOCKCACHE_KEY, EXTERNAL_BLOCKCACHE_DEFAULT);<a name="line.698"></a>
+<span class="sourceLineNo">699</span>      boolean combinedWithLru = conf.getBoolean(BUCKET_CACHE_COMBINED_KEY,<a name="line.699"></a>
+<span class="sourceLineNo">700</span>        DEFAULT_BUCKET_CACHE_COMBINED);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      if (useExternal) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>        GLOBAL_BLOCK_CACHE_INSTANCE = new InclusiveCombinedBlockCache(l1, l2);<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      } else {<a name="line.703"></a>
+<span class="sourceLineNo">704</span>        if (combinedWithLru) {<a name="line.704"></a>
+<span class="sourceLineNo">705</span>          GLOBAL_BLOCK_CACHE_INSTANCE = new CombinedBlockCache(l1, l2);<a name="line.705"></a>
+<span class="sourceLineNo">706</span>        } else {<a name="line.706"></a>
+<span class="sourceLineNo">707</span>          // L1 and L2 are not 'combined'.  They are connected via the LruBlockCache victimhandler<a name="line.707"></a>
+<span class="sourceLineNo">708</span>          // mechanism.  It is a little ugly but works according to the following: when the<a name="line.708"></a>
+<span class="sourceLineNo">709</span>          // background eviction thread runs, blocks evicted from L1 will go to L2 AND when we get<a name="line.709"></a>
+<span class="sourceLineNo">710</span>          // a block from the L1 cache, if not in L1, we will search L2.<a name="line.710"></a>
+<span class="sourceLineNo">711</span>          GLOBAL_BLOCK_CACHE_INSTANCE = l1;<a name="line.711"></a>
+<span class="sourceLineNo">712</span>        }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      l1.setVictimCache(l2);<a name="line.714"></a>
+<span class="sourceLineNo">715</span>    }<a name="line.715"></a>
+<span class="sourceLineNo">716</span>    return GLOBAL_BLOCK_CACHE_INSTANCE;<a name="line.716"></a>
+<span class="sourceLineNo">717</span>  }<a name="line.717"></a>
+<span class="sourceLineNo">718</span><a name="line.718"></a>
+<span class="sourceLineNo">719</span>  // Supposed to use only from tests. Some tests want to reinit the Global block cache instance<a name="line.719"></a>
+<span class="sourceLineNo">720</span>  @VisibleForTesting<a name="line.720"></a>
+<span class="sourceLineNo">721</span>  static synchronized void clearGlobalInstances() {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    GLOBAL_L1_CACHE_INSTANCE = null;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    GLOBAL_BLOCK_CACHE_INSTANCE = null;<a name="line.723"></a>
+<span class="sourceLineNo">724</span>  }<a name="line.724"></a>
+<span class="sourceLineNo">725</span>}<a name="line.725"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html
index f0e8759..3d2ce7e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.ReplicationQueueDeletor.html
@@ -85,129 +85,132 @@
 <span class="sourceLineNo">077</span>    Set&lt;String&gt; peerIds = new HashSet&lt;&gt;(this.replicationPeers.getAllPeerIds());<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    try {<a name="line.78"></a>
 <span class="sourceLineNo">079</span>      List&lt;String&gt; replicators = this.queuesClient.getListOfReplicators();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      for (String replicator : replicators) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        List&lt;String&gt; queueIds = this.queuesClient.getAllQueues(replicator);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        for (String queueId : queueIds) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>            undeletedQueues.computeIfAbsent(replicator, (key) -&gt; new ArrayList&lt;&gt;()).add(<a name="line.85"></a>
-<span class="sourceLineNo">086</span>              queueId);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>            if (LOG.isDebugEnabled()) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>              LOG.debug("Undeleted replication queue for removed peer found: "<a name="line.88"></a>
-<span class="sourceLineNo">089</span>                  + String.format("[removedPeerId=%s, replicator=%s, queueId=%s]",<a name="line.89"></a>
-<span class="sourceLineNo">090</span>                    queueInfo.getPeerId(), replicator, queueId));<a name="line.90"></a>
-<span class="sourceLineNo">091</span>            }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>          }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>        }<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      }<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    } catch (KeeperException ke) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      throw new IOException("Failed to get the replication queues of all replicators", ke);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    return undeletedQueues;<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>  /**<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @return undeletedHFileRefsQueue replicator with its undeleted queueIds for removed peers in<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   *         hfile-refs queue<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @throws IOException<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public Set&lt;String&gt; getUnDeletedHFileRefsQueues() throws IOException {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    Set&lt;String&gt; undeletedHFileRefsQueue = new HashSet&lt;&gt;();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    Set&lt;String&gt; peerIds = new HashSet&lt;&gt;(this.replicationPeers.getAllPeerIds());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    String hfileRefsZNode = queueDeletor.getHfileRefsZNode();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    try {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      if (-1 == ZKUtil.checkExists(zkw, hfileRefsZNode)) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        return null;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      List&lt;String&gt; listOfPeers = this.queuesClient.getAllPeersFromHFileRefsQueue();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      Set&lt;String&gt; peers = new HashSet&lt;&gt;(listOfPeers);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      peers.removeAll(peerIds);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      if (!peers.isEmpty()) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        undeletedHFileRefsQueue.addAll(peers);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    } catch (KeeperException e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      throw new IOException("Failed to get list of all peers from hfile-refs znode "<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          + hfileRefsZNode, e);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    return undeletedHFileRefsQueue;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private class ReplicationQueueDeletor extends ReplicationStateZKBase {<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public ReplicationQueueDeletor(ZooKeeperWatcher zk, Configuration conf, Abortable abortable) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      super(zk, conf, abortable);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>    /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>     * @param replicator The regionserver which has undeleted queue<a name="line.134"></a>
-<span class="sourceLineNo">135</span>     * @param queueId The undeleted queue id<a name="line.135"></a>
-<span class="sourceLineNo">136</span>     * @throws IOException<a name="line.136"></a>
-<span class="sourceLineNo">137</span>     */<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    public void removeQueue(final String replicator, final String queueId) throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      String queueZnodePath = ZKUtil.joinZNode(ZKUtil.joinZNode(this.queuesZNode, replicator),<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        queueId);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      try {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        if (!replicationPeers.getAllPeerIds().contains(queueInfo.getPeerId())) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>          ZKUtil.deleteNodeRecursively(this.zookeeper, queueZnodePath);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          LOG.info("Successfully removed replication queue, replicator: " + replicator<a name="line.145"></a>
-<span class="sourceLineNo">146</span>              + ", queueId: " + queueId);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      } catch (KeeperException e) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        throw new IOException("Failed to delete queue, replicator: " + replicator + ", queueId: "<a name="line.149"></a>
-<span class="sourceLineNo">150</span>            + queueId);<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>    /**<a name="line.154"></a>
-<span class="sourceLineNo">155</span>     * @param hfileRefsQueueId The undeleted hfile-refs queue id<a name="line.155"></a>
-<span class="sourceLineNo">156</span>     * @throws IOException<a name="line.156"></a>
-<span class="sourceLineNo">157</span>     */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    public void removeHFileRefsQueue(final String hfileRefsQueueId) throws IOException {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      String node = ZKUtil.joinZNode(this.hfileRefsZNode, hfileRefsQueueId);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      try {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        if (!replicationPeers.getAllPeerIds().contains(hfileRefsQueueId)) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          ZKUtil.deleteNodeRecursively(this.zookeeper, node);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>          LOG.info("Successfully removed hfile-refs queue " + hfileRefsQueueId + " from path "<a name="line.163"></a>
-<span class="sourceLineNo">164</span>              + hfileRefsZNode);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      } catch (KeeperException e) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        throw new IOException("Failed to delete hfile-refs queue " + hfileRefsQueueId<a name="line.167"></a>
-<span class="sourceLineNo">168</span>            + " from path " + hfileRefsZNode);<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>    String getHfileRefsZNode() {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      return this.hfileRefsZNode;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * Remove the undeleted replication queue's zk node for removed peers.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param undeletedQueues replicator with its queueIds for removed peers<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @throws IOException<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public void removeQueues(final Map&lt;String, List&lt;String&gt;&gt; undeletedQueues) throws IOException {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    for (Entry&lt;String, List&lt;String&gt;&gt; replicatorAndQueueIds : undeletedQueues.entrySet()) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      String replicator = replicatorAndQueueIds.getKey();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      for (String queueId : replicatorAndQueueIds.getValue()) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        queueDeletor.removeQueue(replicator, queueId);<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><a name="line.190"></a>
-<span class="sourceLineNo">191</span>  /**<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * Remove the undeleted hfile-refs queue's zk node for removed peers.<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * @param undeletedHFileRefsQueues replicator with its undeleted queueIds for removed peers in<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   *          hfile-refs queue<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   * @throws IOException<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public void removeHFileRefsQueues(final Set&lt;String&gt; undeletedHFileRefsQueues) throws IOException {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    for (String hfileRefsQueueId : undeletedHFileRefsQueues) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      queueDeletor.removeHFileRefsQueue(hfileRefsQueueId);<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">080</span>      if (replicators == null || replicators.isEmpty()) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        return undeletedQueues;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      }<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      for (String replicator : replicators) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        List&lt;String&gt; queueIds = this.queuesClient.getAllQueues(replicator);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        for (String queueId : queueIds) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>            undeletedQueues.computeIfAbsent(replicator, (key) -&gt; new ArrayList&lt;&gt;()).add(<a name="line.88"></a>
+<span class="sourceLineNo">089</span>              queueId);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>            if (LOG.isDebugEnabled()) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>              LOG.debug("Undeleted replication queue for removed peer found: "<a name="line.91"></a>
+<span class="sourceLineNo">092</span>                  + String.format("[removedPeerId=%s, replicator=%s, queueId=%s]",<a name="line.92"></a>
+<span class="sourceLineNo">093</span>                    queueInfo.getPeerId(), replicator, queueId));<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>          }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    } catch (KeeperException ke) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      throw new IOException("Failed to get the replication queues of all replicators", ke);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    return undeletedQueues;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @return undeletedHFileRefsQueue replicator with its undeleted queueIds for removed peers in<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   *         hfile-refs queue<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @throws IOException<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   */<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public Set&lt;String&gt; getUnDeletedHFileRefsQueues() throws IOException {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    Set&lt;String&gt; undeletedHFileRefsQueue = new HashSet&lt;&gt;();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    Set&lt;String&gt; peerIds = new HashSet&lt;&gt;(this.replicationPeers.getAllPeerIds());<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    String hfileRefsZNode = queueDeletor.getHfileRefsZNode();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    try {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      if (-1 == ZKUtil.checkExists(zkw, hfileRefsZNode)) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        return null;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      List&lt;String&gt; listOfPeers = this.queuesClient.getAllPeersFromHFileRefsQueue();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      Set&lt;String&gt; peers = new HashSet&lt;&gt;(listOfPeers);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      peers.removeAll(peerIds);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      if (!peers.isEmpty()) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        undeletedHFileRefsQueue.addAll(peers);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    } catch (KeeperException e) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      throw new IOException("Failed to get list of all peers from hfile-refs znode "<a name="line.124"></a>
+<span class="sourceLineNo">125</span>          + hfileRefsZNode, e);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    return undeletedHFileRefsQueue;<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>  private class ReplicationQueueDeletor extends ReplicationStateZKBase {<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>    public ReplicationQueueDeletor(ZooKeeperWatcher zk, Configuration conf, Abortable abortable) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      super(zk, conf, abortable);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>     * @param replicator The regionserver which has undeleted queue<a name="line.137"></a>
+<span class="sourceLineNo">138</span>     * @param queueId The undeleted queue id<a name="line.138"></a>
+<span class="sourceLineNo">139</span>     * @throws IOException<a name="line.139"></a>
+<span class="sourceLineNo">140</span>     */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    public void removeQueue(final String replicator, final String queueId) throws IOException {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      String queueZnodePath = ZKUtil.joinZNode(ZKUtil.joinZNode(this.queuesZNode, replicator),<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        queueId);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      try {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        if (!replicationPeers.getAllPeerIds().contains(queueInfo.getPeerId())) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>          ZKUtil.deleteNodeRecursively(this.zookeeper, queueZnodePath);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>          LOG.info("Successfully removed replication queue, replicator: " + replicator<a name="line.148"></a>
+<span class="sourceLineNo">149</span>              + ", queueId: " + queueId);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      } catch (KeeperException e) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        throw new IOException("Failed to delete queue, replicator: " + replicator + ", queueId: "<a name="line.152"></a>
+<span class="sourceLineNo">153</span>            + queueId);<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><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    /**<a name="line.157"></a>
+<span class="sourceLineNo">158</span>     * @param hfileRefsQueueId The undeleted hfile-refs queue id<a name="line.158"></a>
+<span class="sourceLineNo">159</span>     * @throws IOException<a name="line.159"></a>
+<span class="sourceLineNo">160</span>     */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    public void removeHFileRefsQueue(final String hfileRefsQueueId) throws IOException {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      String node = ZKUtil.joinZNode(this.hfileRefsZNode, hfileRefsQueueId);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      try {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        if (!replicationPeers.getAllPeerIds().contains(hfileRefsQueueId)) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>          ZKUtil.deleteNodeRecursively(this.zookeeper, node);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>          LOG.info("Successfully removed hfile-refs queue " + hfileRefsQueueId + " from path "<a name="line.166"></a>
+<span class="sourceLineNo">167</span>              + hfileRefsZNode);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      } catch (KeeperException e) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        throw new IOException("Failed to delete hfile-refs queue " + hfileRefsQueueId<a name="line.170"></a>
+<span class="sourceLineNo">171</span>            + " from path " + hfileRefsZNode);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    String getHfileRefsZNode() {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      return this.hfileRefsZNode;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Remove the undeleted replication queue's zk node for removed peers.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @param undeletedQueues replicator with its queueIds for removed peers<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @throws IOException<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void removeQueues(final Map&lt;String, List&lt;String&gt;&gt; undeletedQueues) throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    for (Entry&lt;String, List&lt;String&gt;&gt; replicatorAndQueueIds : undeletedQueues.entrySet()) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      String replicator = replicatorAndQueueIds.getKey();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      for (String queueId : replicatorAndQueueIds.getValue()) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        queueDeletor.removeQueue(replicator, queueId);<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>  }<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>   * Remove the undeleted hfile-refs queue's zk node for removed peers.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * @param undeletedHFileRefsQueues replicator with its undeleted queueIds for removed peers in<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   *          hfile-refs queue<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * @throws IOException<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  public void removeHFileRefsQueues(final Set&lt;String&gt; undeletedHFileRefsQueues) throws IOException {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    for (String hfileRefsQueueId : undeletedHFileRefsQueues) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      queueDeletor.removeHFileRefsQueue(hfileRefsQueueId);<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>}<a name="line.205"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html
index f0e8759..3d2ce7e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/master/cleaner/ReplicationZKNodeCleaner.html
@@ -85,129 +85,132 @@
 <span class="sourceLineNo">077</span>    Set&lt;String&gt; peerIds = new HashSet&lt;&gt;(this.replicationPeers.getAllPeerIds());<a name="line.77"></a>
 <span class="sourceLineNo">078</span>    try {<a name="line.78"></a>
 <span class="sourceLineNo">079</span>      List&lt;String&gt; replicators = this.queuesClient.getListOfReplicators();<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      for (String replicator : replicators) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        List&lt;String&gt; queueIds = this.queuesClient.getAllQueues(replicator);<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        for (String queueId : queueIds) {<a name="line.82"></a>
-<span class="sourceLineNo">083</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.83"></a>
-<span class="sourceLineNo">084</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.84"></a>
-<span class="sourceLineNo">085</span>            undeletedQueues.computeIfAbsent(replicator, (key) -&gt; new ArrayList&lt;&gt;()).add(<a name="line.85"></a>
-<span class="sourceLineNo">086</span>              queueId);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>            if (LOG.isDebugEnabled()) {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>              LOG.debug("Undeleted replication queue for removed peer found: "<a name="line.88"></a>
-<span class="sourceLineNo">089</span>                  + String.format("[removedPeerId=%s, replicator=%s, queueId=%s]",<a name="line.89"></a>
-<span class="sourceLineNo">090</span>                    queueInfo.getPeerId(), replicator, queueId));<a name="line.90"></a>
-<span class="sourceLineNo">091</span>            }<a name="line.91"></a>
-<span class="sourceLineNo">092</span>          }<a name="line.92"></a>
-<span class="sourceLineNo">093</span>        }<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      }<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    } catch (KeeperException ke) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      throw new IOException("Failed to get the replication queues of all replicators", ke);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    }<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    return undeletedQueues;<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>  /**<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * @return undeletedHFileRefsQueue replicator with its undeleted queueIds for removed peers in<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   *         hfile-refs queue<a name="line.103"></a>
-<span class="sourceLineNo">104</span>   * @throws IOException<a name="line.104"></a>
-<span class="sourceLineNo">105</span>   */<a name="line.105"></a>
-<span class="sourceLineNo">106</span>  public Set&lt;String&gt; getUnDeletedHFileRefsQueues() throws IOException {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    Set&lt;String&gt; undeletedHFileRefsQueue = new HashSet&lt;&gt;();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    Set&lt;String&gt; peerIds = new HashSet&lt;&gt;(this.replicationPeers.getAllPeerIds());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    String hfileRefsZNode = queueDeletor.getHfileRefsZNode();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    try {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      if (-1 == ZKUtil.checkExists(zkw, hfileRefsZNode)) {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        return null;<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      }<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      List&lt;String&gt; listOfPeers = this.queuesClient.getAllPeersFromHFileRefsQueue();<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      Set&lt;String&gt; peers = new HashSet&lt;&gt;(listOfPeers);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      peers.removeAll(peerIds);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      if (!peers.isEmpty()) {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        undeletedHFileRefsQueue.addAll(peers);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    } catch (KeeperException e) {<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      throw new IOException("Failed to get list of all peers from hfile-refs znode "<a name="line.121"></a>
-<span class="sourceLineNo">122</span>          + hfileRefsZNode, e);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    }<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    return undeletedHFileRefsQueue;<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private class ReplicationQueueDeletor extends ReplicationStateZKBase {<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public ReplicationQueueDeletor(ZooKeeperWatcher zk, Configuration conf, Abortable abortable) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>      super(zk, conf, abortable);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    }<a name="line.131"></a>
-<span class="sourceLineNo">132</span><a name="line.132"></a>
-<span class="sourceLineNo">133</span>    /**<a name="line.133"></a>
-<span class="sourceLineNo">134</span>     * @param replicator The regionserver which has undeleted queue<a name="line.134"></a>
-<span class="sourceLineNo">135</span>     * @param queueId The undeleted queue id<a name="line.135"></a>
-<span class="sourceLineNo">136</span>     * @throws IOException<a name="line.136"></a>
-<span class="sourceLineNo">137</span>     */<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    public void removeQueue(final String replicator, final String queueId) throws IOException {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      String queueZnodePath = ZKUtil.joinZNode(ZKUtil.joinZNode(this.queuesZNode, replicator),<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        queueId);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      try {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        if (!replicationPeers.getAllPeerIds().contains(queueInfo.getPeerId())) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>          ZKUtil.deleteNodeRecursively(this.zookeeper, queueZnodePath);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>          LOG.info("Successfully removed replication queue, replicator: " + replicator<a name="line.145"></a>
-<span class="sourceLineNo">146</span>              + ", queueId: " + queueId);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        }<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      } catch (KeeperException e) {<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        throw new IOException("Failed to delete queue, replicator: " + replicator + ", queueId: "<a name="line.149"></a>
-<span class="sourceLineNo">150</span>            + queueId);<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>    /**<a name="line.154"></a>
-<span class="sourceLineNo">155</span>     * @param hfileRefsQueueId The undeleted hfile-refs queue id<a name="line.155"></a>
-<span class="sourceLineNo">156</span>     * @throws IOException<a name="line.156"></a>
-<span class="sourceLineNo">157</span>     */<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    public void removeHFileRefsQueue(final String hfileRefsQueueId) throws IOException {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      String node = ZKUtil.joinZNode(this.hfileRefsZNode, hfileRefsQueueId);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>      try {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        if (!replicationPeers.getAllPeerIds().contains(hfileRefsQueueId)) {<a name="line.161"></a>
-<span class="sourceLineNo">162</span>          ZKUtil.deleteNodeRecursively(this.zookeeper, node);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>          LOG.info("Successfully removed hfile-refs queue " + hfileRefsQueueId + " from path "<a name="line.163"></a>
-<span class="sourceLineNo">164</span>              + hfileRefsZNode);<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        }<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      } catch (KeeperException e) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>        throw new IOException("Failed to delete hfile-refs queue " + hfileRefsQueueId<a name="line.167"></a>
-<span class="sourceLineNo">168</span>            + " from path " + hfileRefsZNode);<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>    String getHfileRefsZNode() {<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      return this.hfileRefsZNode;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  }<a name="line.175"></a>
-<span class="sourceLineNo">176</span><a name="line.176"></a>
-<span class="sourceLineNo">177</span>  /**<a name="line.177"></a>
-<span class="sourceLineNo">178</span>   * Remove the undeleted replication queue's zk node for removed peers.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * @param undeletedQueues replicator with its queueIds for removed peers<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * @throws IOException<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public void removeQueues(final Map&lt;String, List&lt;String&gt;&gt; undeletedQueues) throws IOException {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    for (Entry&lt;String, List&lt;String&gt;&gt; replicatorAndQueueIds : undeletedQueues.entrySet()) {<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      String replicator = replicatorAndQueueIds.getKey();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      for (String queueId : replicatorAndQueueIds.getValue()) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        queueDeletor.removeQueue(replicator, queueId);<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><a name="line.190"></a>
-<span class="sourceLineNo">191</span>  /**<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * Remove the undeleted hfile-refs queue's zk node for removed peers.<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * @param undeletedHFileRefsQueues replicator with its undeleted queueIds for removed peers in<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   *          hfile-refs queue<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   * @throws IOException<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   */<a name="line.196"></a>
-<span class="sourceLineNo">197</span>  public void removeHFileRefsQueues(final Set&lt;String&gt; undeletedHFileRefsQueues) throws IOException {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    for (String hfileRefsQueueId : undeletedHFileRefsQueues) {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      queueDeletor.removeHFileRefsQueue(hfileRefsQueueId);<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">080</span>      if (replicators == null || replicators.isEmpty()) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        return undeletedQueues;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      }<a name="line.82"></a>
+<span class="sourceLineNo">083</span>      for (String replicator : replicators) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        List&lt;String&gt; queueIds = this.queuesClient.getAllQueues(replicator);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        for (String queueId : queueIds) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>          if (!peerIds.contains(queueInfo.getPeerId())) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>            undeletedQueues.computeIfAbsent(replicator, (key) -&gt; new ArrayList&lt;&gt;()).add(<a name="line.88"></a>
+<span class="sourceLineNo">089</span>              queueId);<a name="line.89"></a>
+<span class="sourceLineNo">090</span>            if (LOG.isDebugEnabled()) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>              LOG.debug("Undeleted replication queue for removed peer found: "<a name="line.91"></a>
+<span class="sourceLineNo">092</span>                  + String.format("[removedPeerId=%s, replicator=%s, queueId=%s]",<a name="line.92"></a>
+<span class="sourceLineNo">093</span>                    queueInfo.getPeerId(), replicator, queueId));<a name="line.93"></a>
+<span class="sourceLineNo">094</span>            }<a name="line.94"></a>
+<span class="sourceLineNo">095</span>          }<a name="line.95"></a>
+<span class="sourceLineNo">096</span>        }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      }<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    } catch (KeeperException ke) {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      throw new IOException("Failed to get the replication queues of all replicators", ke);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    return undeletedQueues;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /**<a name="line.104"></a>
+<span class="sourceLineNo">105</span>   * @return undeletedHFileRefsQueue replicator with its undeleted queueIds for removed peers in<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   *         hfile-refs queue<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * @throws IOException<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   */<a name="line.108"></a>
+<span class="sourceLineNo">109</span>  public Set&lt;String&gt; getUnDeletedHFileRefsQueues() throws IOException {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    Set&lt;String&gt; undeletedHFileRefsQueue = new HashSet&lt;&gt;();<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    Set&lt;String&gt; peerIds = new HashSet&lt;&gt;(this.replicationPeers.getAllPeerIds());<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    String hfileRefsZNode = queueDeletor.getHfileRefsZNode();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    try {<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      if (-1 == ZKUtil.checkExists(zkw, hfileRefsZNode)) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        return null;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      List&lt;String&gt; listOfPeers = this.queuesClient.getAllPeersFromHFileRefsQueue();<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      Set&lt;String&gt; peers = new HashSet&lt;&gt;(listOfPeers);<a name="line.118"></a>
+<span class="sourceLineNo">119</span>      peers.removeAll(peerIds);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>      if (!peers.isEmpty()) {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        undeletedHFileRefsQueue.addAll(peers);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>      }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    } catch (KeeperException e) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      throw new IOException("Failed to get list of all peers from hfile-refs znode "<a name="line.124"></a>
+<span class="sourceLineNo">125</span>          + hfileRefsZNode, e);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    return undeletedHFileRefsQueue;<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>  private class ReplicationQueueDeletor extends ReplicationStateZKBase {<a name="line.130"></a>
+<span class="sourceLineNo">131</span><a name="line.131"></a>
+<span class="sourceLineNo">132</span>    public ReplicationQueueDeletor(ZooKeeperWatcher zk, Configuration conf, Abortable abortable) {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      super(zk, conf, abortable);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    }<a name="line.134"></a>
+<span class="sourceLineNo">135</span><a name="line.135"></a>
+<span class="sourceLineNo">136</span>    /**<a name="line.136"></a>
+<span class="sourceLineNo">137</span>     * @param replicator The regionserver which has undeleted queue<a name="line.137"></a>
+<span class="sourceLineNo">138</span>     * @param queueId The undeleted queue id<a name="line.138"></a>
+<span class="sourceLineNo">139</span>     * @throws IOException<a name="line.139"></a>
+<span class="sourceLineNo">140</span>     */<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    public void removeQueue(final String replicator, final String queueId) throws IOException {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      String queueZnodePath = ZKUtil.joinZNode(ZKUtil.joinZNode(this.queuesZNode, replicator),<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        queueId);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      try {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>        ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.145"></a>
+<span class="sourceLineNo">146</span>        if (!replicationPeers.getAllPeerIds().contains(queueInfo.getPeerId())) {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>          ZKUtil.deleteNodeRecursively(this.zookeeper, queueZnodePath);<a name="line.147"></a>
+<span class="sourceLineNo">148</span>          LOG.info("Successfully removed replication queue, replicator: " + replicator<a name="line.148"></a>
+<span class="sourceLineNo">149</span>              + ", queueId: " + queueId);<a name="line.149"></a>
+<span class="sourceLineNo">150</span>        }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>      } catch (KeeperException e) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>        throw new IOException("Failed to delete queue, replicator: " + replicator + ", queueId: "<a name="line.152"></a>
+<span class="sourceLineNo">153</span>            + queueId);<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><a name="line.156"></a>
+<span class="sourceLineNo">157</span>    /**<a name="line.157"></a>
+<span class="sourceLineNo">158</span>     * @param hfileRefsQueueId The undeleted hfile-refs queue id<a name="line.158"></a>
+<span class="sourceLineNo">159</span>     * @throws IOException<a name="line.159"></a>
+<span class="sourceLineNo">160</span>     */<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    public void removeHFileRefsQueue(final String hfileRefsQueueId) throws IOException {<a name="line.161"></a>
+<span class="sourceLineNo">162</span>      String node = ZKUtil.joinZNode(this.hfileRefsZNode, hfileRefsQueueId);<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      try {<a name="line.163"></a>
+<span class="sourceLineNo">164</span>        if (!replicationPeers.getAllPeerIds().contains(hfileRefsQueueId)) {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>          ZKUtil.deleteNodeRecursively(this.zookeeper, node);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>          LOG.info("Successfully removed hfile-refs queue " + hfileRefsQueueId + " from path "<a name="line.166"></a>
+<span class="sourceLineNo">167</span>              + hfileRefsZNode);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>      } catch (KeeperException e) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>        throw new IOException("Failed to delete hfile-refs queue " + hfileRefsQueueId<a name="line.170"></a>
+<span class="sourceLineNo">171</span>            + " from path " + hfileRefsZNode);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    String getHfileRefsZNode() {<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      return this.hfileRefsZNode;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>  }<a name="line.178"></a>
+<span class="sourceLineNo">179</span><a name="line.179"></a>
+<span class="sourceLineNo">180</span>  /**<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   * Remove the undeleted replication queue's zk node for removed peers.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>   * @param undeletedQueues replicator with its queueIds for removed peers<a name="line.182"></a>
+<span class="sourceLineNo">183</span>   * @throws IOException<a name="line.183"></a>
+<span class="sourceLineNo">184</span>   */<a name="line.184"></a>
+<span class="sourceLineNo">185</span>  public void removeQueues(final Map&lt;String, List&lt;String&gt;&gt; undeletedQueues) throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    for (Entry&lt;String, List&lt;String&gt;&gt; replicatorAndQueueIds : undeletedQueues.entrySet()) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      String replicator = replicatorAndQueueIds.getKey();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      for (String queueId : replicatorAndQueueIds.getValue()) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        queueDeletor.removeQueue(replicator, queueId);<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>  }<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>   * Remove the undeleted hfile-refs queue's zk node for removed peers.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   * @param undeletedHFileRefsQueues replicator with its undeleted queueIds for removed peers in<a name="line.196"></a>
+<span class="sourceLineNo">197</span>   *          hfile-refs queue<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * @throws IOException<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
+<span class="sourceLineNo">200</span>  public void removeHFileRefsQueues(final Set&lt;String&gt; undeletedHFileRefsQueues) throws IOException {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>    for (String hfileRefsQueueId : undeletedHFileRefsQueues) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      queueDeletor.removeHFileRefsQueue(hfileRefsQueueId);<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>}<a name="line.205"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.html
index 5257abe..7a7233b 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationPeersZKImpl.html
@@ -528,27 +528,30 @@
 <span class="sourceLineNo">520</span>    if (queuesClient == null) return;<a name="line.520"></a>
 <span class="sourceLineNo">521</span>    try {<a name="line.521"></a>
 <span class="sourceLineNo">522</span>      List&lt;String&gt; replicators = queuesClient.getListOfReplicators();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      for (String replicator : replicators) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>        List&lt;String&gt; queueIds = queuesClient.getAllQueues(replicator);<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        for (String queueId : queueIds) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>          if (queueInfo.getPeerId().equals(peerId)) {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>            throw new ReplicationException("undeleted queue for peerId: " + peerId<a name="line.528"></a>
-<span class="sourceLineNo">529</span>                + ", replicator: " + replicator + ", queueId: " + queueId);<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>      }<a name="line.532"></a>
-<span class="sourceLineNo">533</span>      // Check for hfile-refs queue<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      if (-1 != ZKUtil.checkExists(zookeeper, hfileRefsZNode)<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          &amp;&amp; queuesClient.getAllPeersFromHFileRefsQueue().contains(peerId)) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>        throw new ReplicationException("Undeleted queue for peerId: " + peerId<a name="line.536"></a>
-<span class="sourceLineNo">537</span>            + ", found in hfile-refs node path " + hfileRefsZNode);<a name="line.537"></a>
-<span class="sourceLineNo">538</span>      }<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    } catch (KeeperException e) {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      throw new ReplicationException("Could not check queues deleted with id=" + peerId, e);<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<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">523</span>      if (replicators == null || replicators.isEmpty()) {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>        return;<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      }<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      for (String replicator : replicators) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>        List&lt;String&gt; queueIds = queuesClient.getAllQueues(replicator);<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        for (String queueId : queueIds) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>          ReplicationQueueInfo queueInfo = new ReplicationQueueInfo(queueId);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>          if (queueInfo.getPeerId().equals(peerId)) {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>            throw new ReplicationException("undeleted queue for peerId: " + peerId<a name="line.531"></a>
+<span class="sourceLineNo">532</span>                + ", replicator: " + replicator + ", queueId: " + queueId);<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>      // Check for hfile-refs queue<a name="line.536"></a>
+<span class="sourceLineNo">537</span>      if (-1 != ZKUtil.checkExists(zookeeper, hfileRefsZNode)<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          &amp;&amp; queuesClient.getAllPeersFromHFileRefsQueue().contains(peerId)) {<a name="line.538"></a>
+<span class="sourceLineNo">539</span>        throw new ReplicationException("Undeleted queue for peerId: " + peerId<a name="line.539"></a>
+<span class="sourceLineNo">540</span>            + ", found in hfile-refs node path " + hfileRefsZNode);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>      }<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    } catch (KeeperException e) {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      throw new ReplicationException("Could not check queues deleted with id=" + peerId, 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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/9e6e3360/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.html
index 2515c4c..6fe3489 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationQueuesClientZKImpl.html
@@ -106,7 +106,7 @@
 <span class="sourceLineNo">098</span>    for (int retry = 0; ; retry++) {<a name="line.98"></a>
 <span class="sourceLineNo">099</span>      int v0 = getQueuesZNodeCversion();<a name="line.99"></a>
 <span class="sourceLineNo">100</span>      List&lt;String&gt; rss = getListOfReplicators();<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      if (rss == null) {<a name="line.101"></a>
+<span class="sourceLineNo">101</span>      if (rss == null || rss.isEmpty()) {<a name="line.101"></a>
 <span class="sourceLineNo">102</span>        LOG.debug("Didn't find any region server that replicates, won't prevent any deletions.");<a name="line.102"></a>
 <span class="sourceLineNo">103</span>        return ImmutableSet.of();<a name="line.103"></a>
 <span class="sourceLineNo">104</span>      }<a name="line.104"></a>