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

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

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/526c7822/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
index e9ec3b0..4504336 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
@@ -26,85 +26,85 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.io.InterruptedIOException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.net.InetSocketAddress;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.security.PrivilegedExceptionAction;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Collection;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.HashSet;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Iterator;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.NavigableSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Set;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Callable;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.CompletionService;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.ExecutionException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.ExecutorCompletionService;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.concurrent.Future;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.logging.Log;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.commons.logging.LogFactory;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configuration;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.Cell;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HConstants;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.Tag;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TagType;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.TagUtil;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.conf.ConfigurationManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.io.crypto.Encryption;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.io.hfile.HFileContext;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoderImpl;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.io.hfile.HFileScanner;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.io.hfile.InvalidHFileException;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionContext;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.wal.WALUtil;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.security.EncryptionUtil;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.security.User;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.util.ChecksumType;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.util.ClassSize;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.util.StringUtils;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>import com.google.common.annotations.VisibleForTesting;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import com.google.common.base.Preconditions;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import com.google.common.collect.ImmutableCollection;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import com.google.common.collect.ImmutableList;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import com.google.common.collect.Lists;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import com.google.common.collect.Sets;<a name="line.99"></a>
+<span class="sourceLineNo">021</span>import com.google.common.annotations.VisibleForTesting;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import com.google.common.base.Preconditions;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import com.google.common.collect.ImmutableCollection;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import com.google.common.collect.ImmutableList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import com.google.common.collect.Lists;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import com.google.common.collect.Sets;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.io.IOException;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.io.InterruptedIOException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.net.InetSocketAddress;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.security.PrivilegedExceptionAction;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Collection;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Collections;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.HashMap;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.HashSet;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Iterator;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.List;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.NavigableSet;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.Callable;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.CompletionService;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.ExecutionException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.util.concurrent.ExecutorCompletionService;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.concurrent.Future;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.commons.logging.Log;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.commons.logging.LogFactory;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.FileSystem;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.fs.Path;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.Cell;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HConstants;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.TableName;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.Tag;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.TagType;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.TagUtil;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.conf.ConfigurationManager;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.io.crypto.Encryption;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.io.hfile.HFileContext;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoderImpl;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.io.hfile.HFileScanner;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.io.hfile.InvalidHFileException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionContext;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.regionserver.wal.WALUtil;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.security.EncryptionUtil;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.security.User;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.ChecksumType;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.ClassSize;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.util.StringUtils;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<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> * A Store holds a column family in a Region.  Its a memstore and a set of zero<a name="line.102"></a>
@@ -1644,7 +1644,7 @@
 <span class="sourceLineNo">1636</span>      this.lock.readLock().unlock();<a name="line.1636"></a>
 <span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
 <span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    LOG.debug(getRegionInfo().getEncodedName() + " - "  + getColumnFamilyName()<a name="line.1639"></a>
+<span class="sourceLineNo">1639</span>    LOG.debug(getRegionInfo().getEncodedName() + " - " + getColumnFamilyName()<a name="line.1639"></a>
 <span class="sourceLineNo">1640</span>        + ": Initiating " + (request.isMajor() ? "major" : "minor") + " compaction"<a name="line.1640"></a>
 <span class="sourceLineNo">1641</span>        + (request.isAllFiles() ? " (all files)" : ""));<a name="line.1641"></a>
 <span class="sourceLineNo">1642</span>    this.region.reportCompactionRequestStart(request.isMajor());<a name="line.1642"></a>
@@ -1998,72 +1998,72 @@
 <span class="sourceLineNo">1990</span>  }<a name="line.1990"></a>
 <span class="sourceLineNo">1991</span><a name="line.1991"></a>
 <span class="sourceLineNo">1992</span>  /**<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>   * Used in tests. TODO: Remove<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>   *<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>   * Updates the value for the given row/family/qualifier. This function will always be seen as<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>   * atomic by other readers because it only puts a single KV to memstore. Thus no read/write<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>   * control necessary.<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>   * @param row row to update<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>   * @param f family to update<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>   * @param qualifier qualifier to update<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>   * @param newValue the new value to set into memstore<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>   * @return memstore size delta<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>   * @throws IOException<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>   */<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  public long updateColumnValue(byte [] row, byte [] f,<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>                                byte [] qualifier, long newValue)<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>      throws IOException {<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span><a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    this.lock.readLock().lock();<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    try {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span><a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>      return this.memstore.updateColumnValue(row,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          f,<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          qualifier,<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>          newValue,<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          now);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span><a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    } finally {<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      this.lock.readLock().unlock();<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    }<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>  }<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span><a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>  @Override<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>  public long upsert(Iterable&lt;Cell&gt; cells, long readpoint) throws IOException {<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    this.lock.readLock().lock();<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      return this.memstore.upsert(cells, readpoint);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    } finally {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>      this.lock.readLock().unlock();<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>  }<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span><a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>  @Override<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>  public StoreFlushContext createFlushContext(long cacheFlushId) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>    return new StoreFlusherImpl(cacheFlushId);<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>  }<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span><a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>  private final class StoreFlusherImpl implements StoreFlushContext {<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span><a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    private long cacheFlushSeqNum;<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    private MemStoreSnapshot snapshot;<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    private List&lt;Path&gt; tempFiles;<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    private List&lt;Path&gt; committedFiles;<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private long cacheFlushCount;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private long cacheFlushSize;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    private StoreFlusherImpl(long cacheFlushSeqNum) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.cacheFlushSeqNum = cacheFlushSeqNum;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    }<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span><a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    /**<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>     * This is not thread safe. The caller should have a lock on the region or the store.<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>     * If necessary, the lock can be added with the patch provided in HBASE-10087<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>     */<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    @Override<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    public void prepare() {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      this.snapshot = memstore.snapshot();<a name="line.2058"></a>
+<span class="sourceLineNo">1993</span>   * Updates the value for the given row/family/qualifier. This function will always be seen as<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>   * atomic by other readers because it only puts a single KV to memstore. Thus no read/write<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>   * control necessary.<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>   * @param row row to update<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>   * @param f family to update<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>   * @param qualifier qualifier to update<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>   * @param newValue the new value to set into memstore<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>   * @return memstore size delta<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>   * @throws IOException<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>   */<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>  @VisibleForTesting<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>  public long updateColumnValue(byte [] row, byte [] f,<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>                                byte [] qualifier, long newValue)<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>      throws IOException {<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span><a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    this.lock.readLock().lock();<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    try {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span><a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>      return this.memstore.updateColumnValue(row,<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>          f,<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>          qualifier,<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          newValue,<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>          now);<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span><a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>    } finally {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>      this.lock.readLock().unlock();<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    }<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>  }<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span><a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  @Override<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>  public long upsert(Iterable&lt;Cell&gt; cells, long readpoint) throws IOException {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    this.lock.readLock().lock();<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    try {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return this.memstore.upsert(cells, readpoint);<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    } finally {<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>      this.lock.readLock().unlock();<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>  }<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span><a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>  @Override<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>  public StoreFlushContext createFlushContext(long cacheFlushId) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>    return new StoreFlusherImpl(cacheFlushId);<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>  }<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>  private final class StoreFlusherImpl implements StoreFlushContext {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span><a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    private long cacheFlushSeqNum;<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>    private MemStoreSnapshot snapshot;<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    private List&lt;Path&gt; tempFiles;<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>    private List&lt;Path&gt; committedFiles;<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    private long cacheFlushCount;<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>    private long cacheFlushSize;<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span><a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    private StoreFlusherImpl(long cacheFlushSeqNum) {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      this.cacheFlushSeqNum = cacheFlushSeqNum;<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span><a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    /**<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>     * This is not thread safe. The caller should have a lock on the region or the store.<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>     * If necessary, the lock can be added with the patch provided in HBASE-10087<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>     */<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>    @Override<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    public void prepare() {<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>      // passing the current sequence number of the wal - to allow bookkeeping in the memstore<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      this.snapshot = memstore.snapshot(cacheFlushSeqNum);<a name="line.2058"></a>
 <span class="sourceLineNo">2059</span>      this.cacheFlushCount = snapshot.getCellsCount();<a name="line.2059"></a>
 <span class="sourceLineNo">2060</span>      this.cacheFlushSize = snapshot.getSize();<a name="line.2060"></a>
 <span class="sourceLineNo">2061</span>      committedFiles = new ArrayList&lt;Path&gt;(1);<a name="line.2061"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/526c7822/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
index e9ec3b0..4504336 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -26,85 +26,85 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.io.InterruptedIOException;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.net.InetSocketAddress;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.security.PrivilegedExceptionAction;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.ArrayList;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Collection;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.Collections;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.HashMap;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.HashSet;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.Iterator;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.List;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.NavigableSet;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import java.util.Set;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.util.concurrent.Callable;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.CompletionService;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.ExecutionException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.ExecutorCompletionService;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.concurrent.Future;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.commons.logging.Log;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.commons.logging.LogFactory;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.conf.Configuration;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.fs.FileSystem;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.fs.Path;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.Cell;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.HConstants;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.TableName;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.Tag;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.TagType;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.TagUtil;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.conf.ConfigurationManager;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.io.crypto.Encryption;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.io.hfile.HFileContext;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoderImpl;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.io.hfile.HFileScanner;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.io.hfile.InvalidHFileException;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionContext;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.regionserver.wal.WALUtil;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.security.EncryptionUtil;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.security.User;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.util.ChecksumType;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.util.ClassSize;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>import org.apache.hadoop.util.StringUtils;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<a name="line.92"></a>
-<span class="sourceLineNo">093</span><a name="line.93"></a>
-<span class="sourceLineNo">094</span>import com.google.common.annotations.VisibleForTesting;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>import com.google.common.base.Preconditions;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>import com.google.common.collect.ImmutableCollection;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>import com.google.common.collect.ImmutableList;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>import com.google.common.collect.Lists;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>import com.google.common.collect.Sets;<a name="line.99"></a>
+<span class="sourceLineNo">021</span>import com.google.common.annotations.VisibleForTesting;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import com.google.common.base.Preconditions;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import com.google.common.collect.ImmutableCollection;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import com.google.common.collect.ImmutableList;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import com.google.common.collect.Lists;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import com.google.common.collect.Sets;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.io.IOException;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.io.InterruptedIOException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.net.InetSocketAddress;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.security.PrivilegedExceptionAction;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.ArrayList;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.Collection;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.Collections;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.HashMap;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import java.util.HashSet;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import java.util.Iterator;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import java.util.List;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import java.util.NavigableSet;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.Callable;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.CompletionService;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.ExecutionException;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.util.concurrent.ExecutorCompletionService;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.concurrent.Future;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import java.util.concurrent.ThreadPoolExecutor;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import java.util.concurrent.locks.ReentrantReadWriteLock;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.commons.logging.Log;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.commons.logging.LogFactory;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.FileSystem;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.fs.Path;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.Cell;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.CellComparator;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.CompoundConfiguration;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HColumnDescriptor;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HConstants;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.TableName;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.Tag;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.TagType;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.TagUtil;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.conf.ConfigurationManager;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.io.crypto.Encryption;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.io.hfile.CacheConfig;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.io.hfile.HFile;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.io.hfile.HFileContext;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.io.hfile.HFileContextBuilder;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoderImpl;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.io.hfile.HFileScanner;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.io.hfile.InvalidHFileException;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.monitoring.MonitoredTask;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.protobuf.ProtobufUtil;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionContext;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>import org.apache.hadoop.hbase.regionserver.wal.WALUtil;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hadoop.hbase.security.EncryptionUtil;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>import org.apache.hadoop.hbase.security.User;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>import org.apache.hadoop.hbase.util.ChecksumType;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>import org.apache.hadoop.hbase.util.ClassSize;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>import org.apache.hadoop.hbase.util.ReflectionUtils;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>import org.apache.hadoop.util.StringUtils;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>import org.apache.hadoop.util.StringUtils.TraditionalBinaryPrefix;<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> * A Store holds a column family in a Region.  Its a memstore and a set of zero<a name="line.102"></a>
@@ -1644,7 +1644,7 @@
 <span class="sourceLineNo">1636</span>      this.lock.readLock().unlock();<a name="line.1636"></a>
 <span class="sourceLineNo">1637</span>    }<a name="line.1637"></a>
 <span class="sourceLineNo">1638</span><a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>    LOG.debug(getRegionInfo().getEncodedName() + " - "  + getColumnFamilyName()<a name="line.1639"></a>
+<span class="sourceLineNo">1639</span>    LOG.debug(getRegionInfo().getEncodedName() + " - " + getColumnFamilyName()<a name="line.1639"></a>
 <span class="sourceLineNo">1640</span>        + ": Initiating " + (request.isMajor() ? "major" : "minor") + " compaction"<a name="line.1640"></a>
 <span class="sourceLineNo">1641</span>        + (request.isAllFiles() ? " (all files)" : ""));<a name="line.1641"></a>
 <span class="sourceLineNo">1642</span>    this.region.reportCompactionRequestStart(request.isMajor());<a name="line.1642"></a>
@@ -1998,72 +1998,72 @@
 <span class="sourceLineNo">1990</span>  }<a name="line.1990"></a>
 <span class="sourceLineNo">1991</span><a name="line.1991"></a>
 <span class="sourceLineNo">1992</span>  /**<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>   * Used in tests. TODO: Remove<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>   *<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>   * Updates the value for the given row/family/qualifier. This function will always be seen as<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>   * atomic by other readers because it only puts a single KV to memstore. Thus no read/write<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>   * control necessary.<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>   * @param row row to update<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>   * @param f family to update<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>   * @param qualifier qualifier to update<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>   * @param newValue the new value to set into memstore<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>   * @return memstore size delta<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>   * @throws IOException<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>   */<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>  public long updateColumnValue(byte [] row, byte [] f,<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>                                byte [] qualifier, long newValue)<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>      throws IOException {<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span><a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    this.lock.readLock().lock();<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>    try {<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span><a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>      return this.memstore.updateColumnValue(row,<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>          f,<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>          qualifier,<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>          newValue,<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>          now);<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span><a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    } finally {<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      this.lock.readLock().unlock();<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    }<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>  }<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span><a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>  @Override<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>  public long upsert(Iterable&lt;Cell&gt; cells, long readpoint) throws IOException {<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    this.lock.readLock().lock();<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>    try {<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>      return this.memstore.upsert(cells, readpoint);<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>    } finally {<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>      this.lock.readLock().unlock();<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    }<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>  }<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span><a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>  @Override<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>  public StoreFlushContext createFlushContext(long cacheFlushId) {<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>    return new StoreFlusherImpl(cacheFlushId);<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>  }<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span><a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>  private final class StoreFlusherImpl implements StoreFlushContext {<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span><a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>    private long cacheFlushSeqNum;<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>    private MemStoreSnapshot snapshot;<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    private List&lt;Path&gt; tempFiles;<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>    private List&lt;Path&gt; committedFiles;<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    private long cacheFlushCount;<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    private long cacheFlushSize;<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span><a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>    private StoreFlusherImpl(long cacheFlushSeqNum) {<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>      this.cacheFlushSeqNum = cacheFlushSeqNum;<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>    }<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span><a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    /**<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>     * This is not thread safe. The caller should have a lock on the region or the store.<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>     * If necessary, the lock can be added with the patch provided in HBASE-10087<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>     */<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    @Override<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    public void prepare() {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      this.snapshot = memstore.snapshot();<a name="line.2058"></a>
+<span class="sourceLineNo">1993</span>   * Updates the value for the given row/family/qualifier. This function will always be seen as<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>   * atomic by other readers because it only puts a single KV to memstore. Thus no read/write<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>   * control necessary.<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>   * @param row row to update<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>   * @param f family to update<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>   * @param qualifier qualifier to update<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>   * @param newValue the new value to set into memstore<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>   * @return memstore size delta<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>   * @throws IOException<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>   */<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>  @VisibleForTesting<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>  public long updateColumnValue(byte [] row, byte [] f,<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>                                byte [] qualifier, long newValue)<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>      throws IOException {<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span><a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>    this.lock.readLock().lock();<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    try {<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span><a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>      return this.memstore.updateColumnValue(row,<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>          f,<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>          qualifier,<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>          newValue,<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>          now);<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span><a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>    } finally {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>      this.lock.readLock().unlock();<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    }<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>  }<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span><a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>  @Override<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>  public long upsert(Iterable&lt;Cell&gt; cells, long readpoint) throws IOException {<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>    this.lock.readLock().lock();<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    try {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      return this.memstore.upsert(cells, readpoint);<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>    } finally {<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>      this.lock.readLock().unlock();<a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>  }<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span><a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>  @Override<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>  public StoreFlushContext createFlushContext(long cacheFlushId) {<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>    return new StoreFlusherImpl(cacheFlushId);<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>  }<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>  private final class StoreFlusherImpl implements StoreFlushContext {<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span><a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    private long cacheFlushSeqNum;<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>    private MemStoreSnapshot snapshot;<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span>    private List&lt;Path&gt; tempFiles;<a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>    private List&lt;Path&gt; committedFiles;<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>    private long cacheFlushCount;<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>    private long cacheFlushSize;<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span><a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>    private StoreFlusherImpl(long cacheFlushSeqNum) {<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>      this.cacheFlushSeqNum = cacheFlushSeqNum;<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>    }<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span><a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>    /**<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>     * This is not thread safe. The caller should have a lock on the region or the store.<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>     * If necessary, the lock can be added with the patch provided in HBASE-10087<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>     */<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>    @Override<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>    public void prepare() {<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>      // passing the current sequence number of the wal - to allow bookkeeping in the memstore<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      this.snapshot = memstore.snapshot(cacheFlushSeqNum);<a name="line.2058"></a>
 <span class="sourceLineNo">2059</span>      this.cacheFlushCount = snapshot.getCellsCount();<a name="line.2059"></a>
 <span class="sourceLineNo">2060</span>      this.cacheFlushSize = snapshot.getSize();<a name="line.2060"></a>
 <span class="sourceLineNo">2061</span>      committedFiles = new ArrayList&lt;Path&gt;(1);<a name="line.2061"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/526c7822/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
new file mode 100644
index 0000000..7157068
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegment.html
@@ -0,0 +1,144 @@
+<!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> *<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
+<span class="sourceLineNo">012</span> *<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
+<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
+<span class="sourceLineNo">018</span> */<a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.commons.lang.NotImplementedException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.Cell;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>/**<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * ImmutableSegment is an abstract class that extends the API supported by a {@link Segment},<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * and is not needed for a {@link MutableSegment}. Specifically, the method<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * {@link ImmutableSegment#getKeyValueScanner()} builds a special scanner for the<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * {@link MemStoreSnapshot} object.<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * In addition, this class overrides methods that are not likely to be supported by an immutable<a name="line.30"></a>
+<span class="sourceLineNo">031</span> * segment, e.g. {@link Segment#rollback(Cell)} and {@link Segment#getCellSet()}, which<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * can be very inefficient.<a name="line.32"></a>
+<span class="sourceLineNo">033</span> */<a name="line.33"></a>
+<span class="sourceLineNo">034</span>@InterfaceAudience.Private<a name="line.34"></a>
+<span class="sourceLineNo">035</span>public abstract class ImmutableSegment extends Segment {<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>  public ImmutableSegment(Segment segment) {<a name="line.37"></a>
+<span class="sourceLineNo">038</span>    super(segment);<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  }<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>  /**<a name="line.41"></a>
+<span class="sourceLineNo">042</span>   * Removes the given cell from this segment.<a name="line.42"></a>
+<span class="sourceLineNo">043</span>   * By default immutable store segment can not rollback<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   * It may be invoked by tests in specific cases where it is known to be supported {@link<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * ImmutableSegmentAdapter}<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   */<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  @Override<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public long rollback(Cell cell) {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    return 0;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  }<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  /**<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * Returns a set of all the cells in the segment.<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * The implementation of this method might be very inefficient for some immutable segments<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * that do not maintain a cell set. Therefore by default this method is not supported.<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * It may be invoked by tests in specific cases where it is known to be supported {@link<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * ImmutableSegmentAdapter}<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  @Override<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public CellSet getCellSet() {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    throw new NotImplementedException("Immutable Segment does not support this operation by " +<a name="line.61"></a>
+<span class="sourceLineNo">062</span>        "default");<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  }<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  /**<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   * Builds a special scanner for the MemStoreSnapshot object that may be different than the<a name="line.66"></a>
+<span class="sourceLineNo">067</span>   * general segment scanner.<a name="line.67"></a>
+<span class="sourceLineNo">068</span>   * @return a special scanner for the MemStoreSnapshot object<a name="line.68"></a>
+<span class="sourceLineNo">069</span>   */<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  public abstract KeyValueScanner getKeyValueScanner();<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>}<a name="line.72"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/526c7822/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegmentAdapter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegmentAdapter.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegmentAdapter.html
new file mode 100644
index 0000000..cb291b7
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/ImmutableSegmentAdapter.html
@@ -0,0 +1,179 @@
+<!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> *<a name="line.2"></a>
+<span class="sourceLineNo">003</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * or more contributor license agreements.  See the NOTICE file<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * distributed with this work for additional information<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * with the License.  You may obtain a copy of the License at<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
+<span class="sourceLineNo">012</span> *<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * See the License for the specific language governing permissions and<a name="line.16"></a>
+<span class="sourceLineNo">017</span> * limitations under the License.<a name="line.17"></a>
+<span class="sourceLineNo">018</span> */<a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.apache.commons.logging.Log;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.Cell;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.util.CollectionBackedScanner;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
+<span class="sourceLineNo">027</span> * This segment is adapting a mutable segment making it into an immutable segment.<a name="line.27"></a>
+<span class="sourceLineNo">028</span> * This is used when a mutable segment is moved to being a snapshot or pushed into a compaction<a name="line.28"></a>
+<span class="sourceLineNo">029</span> * pipeline, that consists only of immutable segments.<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * The compaction may generate different type of immutable segment<a name="line.30"></a>
+<span class="sourceLineNo">031</span> */<a name="line.31"></a>
+<span class="sourceLineNo">032</span>@InterfaceAudience.Private<a name="line.32"></a>
+<span class="sourceLineNo">033</span>public class ImmutableSegmentAdapter extends ImmutableSegment {<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>  final private MutableSegment adaptee;<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>  public ImmutableSegmentAdapter(MutableSegment segment) {<a name="line.37"></a>
+<span class="sourceLineNo">038</span>    super(segment);<a name="line.38"></a>
+<span class="sourceLineNo">039</span>    this.adaptee = segment;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>  }<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>  @Override<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  public KeyValueScanner getKeyValueScanner() {<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    return new CollectionBackedScanner(adaptee.getCellSet(), adaptee.getComparator());<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  }<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  @Override<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public SegmentScanner getSegmentScanner(long readPoint) {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    return adaptee.getSegmentScanner(readPoint);<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  }<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  @Override<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public boolean isEmpty() {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    return adaptee.isEmpty();<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  }<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>  @Override<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  public int getCellsCount() {<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    return adaptee.getCellsCount();<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  }<a name="line.60"></a>
+<span class="sourceLineNo">061</span><a name="line.61"></a>
+<span class="sourceLineNo">062</span>  @Override<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  public long add(Cell cell) {<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    return adaptee.add(cell);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  }<a name="line.65"></a>
+<span class="sourceLineNo">066</span><a name="line.66"></a>
+<span class="sourceLineNo">067</span>  @Override<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  public Cell getFirstAfter(Cell cell) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    return adaptee.getFirstAfter(cell);<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>  @Override<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public void close() {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    adaptee.close();<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @Override<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public Cell maybeCloneWithAllocator(Cell cell) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    return adaptee.maybeCloneWithAllocator(cell);<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>  @Override<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  public Segment setSize(long size) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    adaptee.setSize(size);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    return this;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  }<a name="line.86"></a>
+<span class="sourceLineNo">087</span><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  public long getSize() {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    return adaptee.getSize();<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>  @Override<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public long rollback(Cell cell) {<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    return adaptee.rollback(cell);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
+<span class="sourceLineNo">097</span><a name="line.97"></a>
+<span class="sourceLineNo">098</span>  @Override<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public CellSet getCellSet() {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    return adaptee.getCellSet();<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  }<a name="line.101"></a>
+<span class="sourceLineNo">102</span><a name="line.102"></a>
+<span class="sourceLineNo">103</span>  @Override<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  public void dump(Log log) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    adaptee.dump(log);<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>