<!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.client;<a name="line.18"></a>
<span class="sourceLineNo">019</span><a name="line.19"></a>
<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import java.util.Collections;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import java.util.HashMap;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import java.util.HashSet;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.util.Map;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.Set;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import java.util.function.Function;<a name="line.26"></a>
<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HConstants;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.KeepDeletedCells;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.MemoryCompactionPolicy;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.exceptions.DeserializationException;<a name="line.30"></a>
<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.exceptions.HBaseException;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.io.compress.Compression;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.io.encoding.DataBlockEncoding;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.io.encoding.IndexBlockEncoding;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.regionserver.BloomType;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.36"></a>
<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.util.PrettyPrinter;<a name="line.37"></a>
<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.util.PrettyPrinter.Unit;<a name="line.38"></a>
<span class="sourceLineNo">039</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.39"></a>
<span class="sourceLineNo">040</span><a name="line.40"></a>
<span class="sourceLineNo">041</span>import org.apache.hbase.thirdparty.com.google.common.base.Preconditions;<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil;<a name="line.43"></a>
<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ColumnFamilySchema;<a name="line.44"></a>
<span class="sourceLineNo">045</span><a name="line.45"></a>
<span class="sourceLineNo">046</span>@InterfaceAudience.Public<a name="line.46"></a>
<span class="sourceLineNo">047</span>public class ColumnFamilyDescriptorBuilder {<a name="line.47"></a>
<span class="sourceLineNo">048</span>  // For future backward compatibility<a name="line.48"></a>
<span class="sourceLineNo">049</span><a name="line.49"></a>
<span class="sourceLineNo">050</span>  // Version 3 was when column names become byte arrays and when we picked up<a name="line.50"></a>
<span class="sourceLineNo">051</span>  // Time-to-live feature. Version 4 was when we moved to byte arrays, HBASE-82.<a name="line.51"></a>
<span class="sourceLineNo">052</span>  // Version 5 was when bloom filter descriptors were removed.<a name="line.52"></a>
<span class="sourceLineNo">053</span>  // Version 6 adds metadata as a map where keys and values are byte[].<a name="line.53"></a>
<span class="sourceLineNo">054</span>  // Version 7 -- add new compression and hfile blocksize to HColumnDescriptor (HBASE-1217)<a name="line.54"></a>
<span class="sourceLineNo">055</span>  // Version 8 -- reintroduction of bloom filters, changed from boolean to enum<a name="line.55"></a>
<span class="sourceLineNo">056</span>  // Version 9 -- add data block encoding<a name="line.56"></a>
<span class="sourceLineNo">057</span>  // Version 10 -- change metadata to standard type.<a name="line.57"></a>
<span class="sourceLineNo">058</span>  // Version 11 -- add column family level configuration.<a name="line.58"></a>
<span class="sourceLineNo">059</span>  private static final byte COLUMN_DESCRIPTOR_VERSION = (byte) 11;<a name="line.59"></a>
<span class="sourceLineNo">060</span><a name="line.60"></a>
<span class="sourceLineNo">061</span>  @InterfaceAudience.Private<a name="line.61"></a>
<span class="sourceLineNo">062</span>  public static final String IN_MEMORY_COMPACTION = "IN_MEMORY_COMPACTION";<a name="line.62"></a>
<span class="sourceLineNo">063</span>  private static final Bytes IN_MEMORY_COMPACTION_BYTES =<a name="line.63"></a>
<span class="sourceLineNo">064</span>    new Bytes(Bytes.toBytes(IN_MEMORY_COMPACTION));<a name="line.64"></a>
<span class="sourceLineNo">065</span><a name="line.65"></a>
<span class="sourceLineNo">066</span>  @InterfaceAudience.Private<a name="line.66"></a>
<span class="sourceLineNo">067</span>  public static final String IN_MEMORY = HConstants.IN_MEMORY;<a name="line.67"></a>
<span class="sourceLineNo">068</span>  private static final Bytes IN_MEMORY_BYTES = new Bytes(Bytes.toBytes(IN_MEMORY));<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>  // These constants are used as FileInfo keys<a name="line.70"></a>
<span class="sourceLineNo">071</span>  @InterfaceAudience.Private<a name="line.71"></a>
<span class="sourceLineNo">072</span>  public static final String COMPRESSION = "COMPRESSION";<a name="line.72"></a>
<span class="sourceLineNo">073</span>  private static final Bytes COMPRESSION_BYTES = new Bytes(Bytes.toBytes(COMPRESSION));<a name="line.73"></a>
<span class="sourceLineNo">074</span>  @InterfaceAudience.Private<a name="line.74"></a>
<span class="sourceLineNo">075</span>  public static final String COMPRESSION_COMPACT = "COMPRESSION_COMPACT";<a name="line.75"></a>
<span class="sourceLineNo">076</span>  private static final Bytes COMPRESSION_COMPACT_BYTES =<a name="line.76"></a>
<span class="sourceLineNo">077</span>    new Bytes(Bytes.toBytes(COMPRESSION_COMPACT));<a name="line.77"></a>
<span class="sourceLineNo">078</span>  public static final String COMPRESSION_COMPACT_MAJOR = "COMPRESSION_COMPACT_MAJOR";<a name="line.78"></a>
<span class="sourceLineNo">079</span>  private static final Bytes COMPRESSION_COMPACT_MAJOR_BYTES =<a name="line.79"></a>
<span class="sourceLineNo">080</span>    new Bytes(Bytes.toBytes(COMPRESSION_COMPACT_MAJOR));<a name="line.80"></a>
<span class="sourceLineNo">081</span>  public static final String COMPRESSION_COMPACT_MINOR = "COMPRESSION_COMPACT_MINOR";<a name="line.81"></a>
<span class="sourceLineNo">082</span>  private static final Bytes COMPRESSION_COMPACT_MINOR_BYTES =<a name="line.82"></a>
<span class="sourceLineNo">083</span>    new Bytes(Bytes.toBytes(COMPRESSION_COMPACT_MINOR));<a name="line.83"></a>
<span class="sourceLineNo">084</span>  @InterfaceAudience.Private<a name="line.84"></a>
<span class="sourceLineNo">085</span>  public static final String DATA_BLOCK_ENCODING = "DATA_BLOCK_ENCODING";<a name="line.85"></a>
<span class="sourceLineNo">086</span>  private static final Bytes DATA_BLOCK_ENCODING_BYTES =<a name="line.86"></a>
<span class="sourceLineNo">087</span>    new Bytes(Bytes.toBytes(DATA_BLOCK_ENCODING));<a name="line.87"></a>
<span class="sourceLineNo">088</span>  @InterfaceAudience.Private<a name="line.88"></a>
<span class="sourceLineNo">089</span>  public static final String INDEX_BLOCK_ENCODING = "INDEX_BLOCK_ENCODING";<a name="line.89"></a>
<span class="sourceLineNo">090</span>  private static final Bytes INDEX_BLOCK_ENCODING_BYTES =<a name="line.90"></a>
<span class="sourceLineNo">091</span>    new Bytes(Bytes.toBytes(INDEX_BLOCK_ENCODING));<a name="line.91"></a>
<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
<span class="sourceLineNo">093</span>   * Key for the BLOCKCACHE attribute. A more exact name would be CACHE_DATA_ON_READ because this<a name="line.93"></a>
<span class="sourceLineNo">094</span>   * flag sets whether or not we cache DATA blocks. We always cache INDEX and BLOOM blocks; caching<a name="line.94"></a>
<span class="sourceLineNo">095</span>   * these blocks cannot be disabled.<a name="line.95"></a>
<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
<span class="sourceLineNo">097</span>  @InterfaceAudience.Private<a name="line.97"></a>
<span class="sourceLineNo">098</span>  public static final String BLOCKCACHE = "BLOCKCACHE";<a name="line.98"></a>
<span class="sourceLineNo">099</span>  private static final Bytes BLOCKCACHE_BYTES = new Bytes(Bytes.toBytes(BLOCKCACHE));<a name="line.99"></a>
<span class="sourceLineNo">100</span>  @InterfaceAudience.Private<a name="line.100"></a>
<span class="sourceLineNo">101</span>  public static final String CACHE_DATA_ON_WRITE = "CACHE_DATA_ON_WRITE";<a name="line.101"></a>
<span class="sourceLineNo">102</span>  private static final Bytes CACHE_DATA_ON_WRITE_BYTES =<a name="line.102"></a>
<span class="sourceLineNo">103</span>    new Bytes(Bytes.toBytes(CACHE_DATA_ON_WRITE));<a name="line.103"></a>
<span class="sourceLineNo">104</span>  @InterfaceAudience.Private<a name="line.104"></a>
<span class="sourceLineNo">105</span>  public static final String CACHE_INDEX_ON_WRITE = "CACHE_INDEX_ON_WRITE";<a name="line.105"></a>
<span class="sourceLineNo">106</span>  private static final Bytes CACHE_INDEX_ON_WRITE_BYTES =<a name="line.106"></a>
<span class="sourceLineNo">107</span>    new Bytes(Bytes.toBytes(CACHE_INDEX_ON_WRITE));<a name="line.107"></a>
<span class="sourceLineNo">108</span>  @InterfaceAudience.Private<a name="line.108"></a>
<span class="sourceLineNo">109</span>  public static final String CACHE_BLOOMS_ON_WRITE = "CACHE_BLOOMS_ON_WRITE";<a name="line.109"></a>
<span class="sourceLineNo">110</span>  private static final Bytes CACHE_BLOOMS_ON_WRITE_BYTES =<a name="line.110"></a>
<span class="sourceLineNo">111</span>    new Bytes(Bytes.toBytes(CACHE_BLOOMS_ON_WRITE));<a name="line.111"></a>
<span class="sourceLineNo">112</span>  @InterfaceAudience.Private<a name="line.112"></a>
<span class="sourceLineNo">113</span>  public static final String EVICT_BLOCKS_ON_CLOSE = "EVICT_BLOCKS_ON_CLOSE";<a name="line.113"></a>
<span class="sourceLineNo">114</span>  private static final Bytes EVICT_BLOCKS_ON_CLOSE_BYTES =<a name="line.114"></a>
<span class="sourceLineNo">115</span>    new Bytes(Bytes.toBytes(EVICT_BLOCKS_ON_CLOSE));<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>   * Key for the PREFETCH_BLOCKS_ON_OPEN attribute. If set, all INDEX, BLOOM, and DATA blocks of<a name="line.118"></a>
<span class="sourceLineNo">119</span>   * HFiles belonging to this family will be loaded into the cache as soon as the file is opened.<a name="line.119"></a>
<span class="sourceLineNo">120</span>   * These loads will not count as cache misses.<a name="line.120"></a>
<span class="sourceLineNo">121</span>   */<a name="line.121"></a>
<span class="sourceLineNo">122</span>  @InterfaceAudience.Private<a name="line.122"></a>
<span class="sourceLineNo">123</span>  public static final String PREFETCH_BLOCKS_ON_OPEN = "PREFETCH_BLOCKS_ON_OPEN";<a name="line.123"></a>
<span class="sourceLineNo">124</span>  private static final Bytes PREFETCH_BLOCKS_ON_OPEN_BYTES =<a name="line.124"></a>
<span class="sourceLineNo">125</span>    new Bytes(Bytes.toBytes(PREFETCH_BLOCKS_ON_OPEN));<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>   * Size of storefile/hfile 'blocks'. Default is {@link #DEFAULT_BLOCKSIZE}. Use smaller block<a name="line.128"></a>
<span class="sourceLineNo">129</span>   * sizes for faster random-access at expense of larger indices (more memory consumption). Note<a name="line.129"></a>
<span class="sourceLineNo">130</span>   * that this is a soft limit and that blocks have overhead (metadata, CRCs) so blocks will tend to<a name="line.130"></a>
<span class="sourceLineNo">131</span>   * be the size specified here and then some; i.e. don't expect that setting BLOCKSIZE=4k means<a name="line.131"></a>
<span class="sourceLineNo">132</span>   * hbase data will align with an SSDs 4k page accesses (TODO).<a name="line.132"></a>
<span class="sourceLineNo">133</span>   */<a name="line.133"></a>
<span class="sourceLineNo">134</span>  @InterfaceAudience.Private<a name="line.134"></a>
<span class="sourceLineNo">135</span>  public static final String BLOCKSIZE = "BLOCKSIZE";<a name="line.135"></a>
<span class="sourceLineNo">136</span>  private static final Bytes BLOCKSIZE_BYTES = new Bytes(Bytes.toBytes(BLOCKSIZE));<a name="line.136"></a>
<span class="sourceLineNo">137</span><a name="line.137"></a>
<span class="sourceLineNo">138</span>  @InterfaceAudience.Private<a name="line.138"></a>
<span class="sourceLineNo">139</span>  public static final String TTL = "TTL";<a name="line.139"></a>
<span class="sourceLineNo">140</span>  private static final Bytes TTL_BYTES = new Bytes(Bytes.toBytes(TTL));<a name="line.140"></a>
<span class="sourceLineNo">141</span>  @InterfaceAudience.Private<a name="line.141"></a>
<span class="sourceLineNo">142</span>  public static final String BLOOMFILTER = "BLOOMFILTER";<a name="line.142"></a>
<span class="sourceLineNo">143</span>  private static final Bytes BLOOMFILTER_BYTES = new Bytes(Bytes.toBytes(BLOOMFILTER));<a name="line.143"></a>
<span class="sourceLineNo">144</span>  @InterfaceAudience.Private<a name="line.144"></a>
<span class="sourceLineNo">145</span>  public static final String REPLICATION_SCOPE = "REPLICATION_SCOPE";<a name="line.145"></a>
<span class="sourceLineNo">146</span>  @InterfaceAudience.Private<a name="line.146"></a>
<span class="sourceLineNo">147</span>  public static final String MAX_VERSIONS = HConstants.VERSIONS;<a name="line.147"></a>
<span class="sourceLineNo">148</span>  private static final Bytes MAX_VERSIONS_BYTES = new Bytes(Bytes.toBytes(MAX_VERSIONS));<a name="line.148"></a>
<span class="sourceLineNo">149</span>  @InterfaceAudience.Private<a name="line.149"></a>
<span class="sourceLineNo">150</span>  public static final String MIN_VERSIONS = "MIN_VERSIONS";<a name="line.150"></a>
<span class="sourceLineNo">151</span>  private static final Bytes MIN_VERSIONS_BYTES = new Bytes(Bytes.toBytes(MIN_VERSIONS));<a name="line.151"></a>
<span class="sourceLineNo">152</span>  /**<a name="line.152"></a>
<span class="sourceLineNo">153</span>   * Retain all cells across flushes and compactions even if they fall behind a delete tombstone. To<a name="line.153"></a>
<span class="sourceLineNo">154</span>   * see all retained cells, do a 'raw' scan; see Scan#setRaw or pass RAW =&amp;gt; true attribute in<a name="line.154"></a>
<span class="sourceLineNo">155</span>   * the shell.<a name="line.155"></a>
<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
<span class="sourceLineNo">157</span>  @InterfaceAudience.Private<a name="line.157"></a>
<span class="sourceLineNo">158</span>  public static final String KEEP_DELETED_CELLS = "KEEP_DELETED_CELLS";<a name="line.158"></a>
<span class="sourceLineNo">159</span>  private static final Bytes KEEP_DELETED_CELLS_BYTES =<a name="line.159"></a>
<span class="sourceLineNo">160</span>    new Bytes(Bytes.toBytes(KEEP_DELETED_CELLS));<a name="line.160"></a>
<span class="sourceLineNo">161</span>  @InterfaceAudience.Private<a name="line.161"></a>
<span class="sourceLineNo">162</span>  public static final String COMPRESS_TAGS = "COMPRESS_TAGS";<a name="line.162"></a>
<span class="sourceLineNo">163</span>  private static final Bytes COMPRESS_TAGS_BYTES = new Bytes(Bytes.toBytes(COMPRESS_TAGS));<a name="line.163"></a>
<span class="sourceLineNo">164</span>  @InterfaceAudience.Private<a name="line.164"></a>
<span class="sourceLineNo">165</span>  public static final String ENCRYPTION = "ENCRYPTION";<a name="line.165"></a>
<span class="sourceLineNo">166</span>  private static final Bytes ENCRYPTION_BYTES = new Bytes(Bytes.toBytes(ENCRYPTION));<a name="line.166"></a>
<span class="sourceLineNo">167</span>  @InterfaceAudience.Private<a name="line.167"></a>
<span class="sourceLineNo">168</span>  public static final String ENCRYPTION_KEY = "ENCRYPTION_KEY";<a name="line.168"></a>
<span class="sourceLineNo">169</span>  private static final Bytes ENCRYPTION_KEY_BYTES = new Bytes(Bytes.toBytes(ENCRYPTION_KEY));<a name="line.169"></a>
<span class="sourceLineNo">170</span><a name="line.170"></a>
<span class="sourceLineNo">171</span>  private static final boolean DEFAULT_MOB = false;<a name="line.171"></a>
<span class="sourceLineNo">172</span>  @InterfaceAudience.Private<a name="line.172"></a>
<span class="sourceLineNo">173</span>  public static final String IS_MOB = "IS_MOB";<a name="line.173"></a>
<span class="sourceLineNo">174</span>  private static final Bytes IS_MOB_BYTES = new Bytes(Bytes.toBytes(IS_MOB));<a name="line.174"></a>
<span class="sourceLineNo">175</span>  @InterfaceAudience.Private<a name="line.175"></a>
<span class="sourceLineNo">176</span>  public static final String MOB_THRESHOLD = "MOB_THRESHOLD";<a name="line.176"></a>
<span class="sourceLineNo">177</span>  private static final Bytes MOB_THRESHOLD_BYTES = new Bytes(Bytes.toBytes(MOB_THRESHOLD));<a name="line.177"></a>
<span class="sourceLineNo">178</span>  public static final long DEFAULT_MOB_THRESHOLD = 100 * 1024; // 100k<a name="line.178"></a>
<span class="sourceLineNo">179</span>  @InterfaceAudience.Private<a name="line.179"></a>
<span class="sourceLineNo">180</span>  public static final String MOB_COMPACT_PARTITION_POLICY = "MOB_COMPACT_PARTITION_POLICY";<a name="line.180"></a>
<span class="sourceLineNo">181</span>  private static final Bytes MOB_COMPACT_PARTITION_POLICY_BYTES =<a name="line.181"></a>
<span class="sourceLineNo">182</span>    new Bytes(Bytes.toBytes(MOB_COMPACT_PARTITION_POLICY));<a name="line.182"></a>
<span class="sourceLineNo">183</span>  public static final MobCompactPartitionPolicy DEFAULT_MOB_COMPACT_PARTITION_POLICY =<a name="line.183"></a>
<span class="sourceLineNo">184</span>    MobCompactPartitionPolicy.DAILY;<a name="line.184"></a>
<span class="sourceLineNo">185</span>  @InterfaceAudience.Private<a name="line.185"></a>
<span class="sourceLineNo">186</span>  public static final String DFS_REPLICATION = "DFS_REPLICATION";<a name="line.186"></a>
<span class="sourceLineNo">187</span>  private static final Bytes DFS_REPLICATION_BYTES = new Bytes(Bytes.toBytes(DFS_REPLICATION));<a name="line.187"></a>
<span class="sourceLineNo">188</span>  public static final short DEFAULT_DFS_REPLICATION = 0;<a name="line.188"></a>
<span class="sourceLineNo">189</span>  @InterfaceAudience.Private<a name="line.189"></a>
<span class="sourceLineNo">190</span>  public static final String STORAGE_POLICY = "STORAGE_POLICY";<a name="line.190"></a>
<span class="sourceLineNo">191</span>  private static final Bytes STORAGE_POLICY_BYTES = new Bytes(Bytes.toBytes(STORAGE_POLICY));<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span>  public static final String NEW_VERSION_BEHAVIOR = "NEW_VERSION_BEHAVIOR";<a name="line.193"></a>
<span class="sourceLineNo">194</span>  private static final Bytes NEW_VERSION_BEHAVIOR_BYTES =<a name="line.194"></a>
<span class="sourceLineNo">195</span>    new Bytes(Bytes.toBytes(NEW_VERSION_BEHAVIOR));<a name="line.195"></a>
<span class="sourceLineNo">196</span>  public static final boolean DEFAULT_NEW_VERSION_BEHAVIOR = false;<a name="line.196"></a>
<span class="sourceLineNo">197</span>  /**<a name="line.197"></a>
<span class="sourceLineNo">198</span>   * Default compression type.<a name="line.198"></a>
<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
<span class="sourceLineNo">200</span>  public static final Compression.Algorithm DEFAULT_COMPRESSION = Compression.Algorithm.NONE;<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>   * Default data block encoding algorithm.<a name="line.203"></a>
<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
<span class="sourceLineNo">205</span>  public static final DataBlockEncoding DEFAULT_DATA_BLOCK_ENCODING = DataBlockEncoding.NONE;<a name="line.205"></a>
<span class="sourceLineNo">206</span><a name="line.206"></a>
<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
<span class="sourceLineNo">208</span>   * Default index block encoding algorithm.<a name="line.208"></a>
<span class="sourceLineNo">209</span>   */<a name="line.209"></a>
<span class="sourceLineNo">210</span>  public static final IndexBlockEncoding DEFAULT_INDEX_BLOCK_ENCODING = IndexBlockEncoding.NONE;<a name="line.210"></a>
<span class="sourceLineNo">211</span><a name="line.211"></a>
<span class="sourceLineNo">212</span>  /**<a name="line.212"></a>
<span class="sourceLineNo">213</span>   * Default number of versions of a record to keep.<a name="line.213"></a>
<span class="sourceLineNo">214</span>   */<a name="line.214"></a>
<span class="sourceLineNo">215</span>  public static final int DEFAULT_MAX_VERSIONS = 1;<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>   * Default is not to keep a minimum of versions.<a name="line.218"></a>
<span class="sourceLineNo">219</span>   */<a name="line.219"></a>
<span class="sourceLineNo">220</span>  public static final int DEFAULT_MIN_VERSIONS = 0;<a name="line.220"></a>
<span class="sourceLineNo">221</span><a name="line.221"></a>
<span class="sourceLineNo">222</span>  /**<a name="line.222"></a>
<span class="sourceLineNo">223</span>   * Default setting for whether to try and serve this column family from memory or not.<a name="line.223"></a>
<span class="sourceLineNo">224</span>   */<a name="line.224"></a>
<span class="sourceLineNo">225</span>  public static final boolean DEFAULT_IN_MEMORY = false;<a name="line.225"></a>
<span class="sourceLineNo">226</span><a name="line.226"></a>
<span class="sourceLineNo">227</span>  /**<a name="line.227"></a>
<span class="sourceLineNo">228</span>   * Default setting for preventing deleted from being collected immediately.<a name="line.228"></a>
<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
<span class="sourceLineNo">230</span>  public static final KeepDeletedCells DEFAULT_KEEP_DELETED = KeepDeletedCells.FALSE;<a name="line.230"></a>
<span class="sourceLineNo">231</span><a name="line.231"></a>
<span class="sourceLineNo">232</span>  /**<a name="line.232"></a>
<span class="sourceLineNo">233</span>   * Default setting for whether to use a block cache or not.<a name="line.233"></a>
<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
<span class="sourceLineNo">235</span>  public static final boolean DEFAULT_BLOCKCACHE = true;<a name="line.235"></a>
<span class="sourceLineNo">236</span><a name="line.236"></a>
<span class="sourceLineNo">237</span>  /**<a name="line.237"></a>
<span class="sourceLineNo">238</span>   * Default setting for whether to cache data blocks on write if block caching is enabled.<a name="line.238"></a>
<span class="sourceLineNo">239</span>   */<a name="line.239"></a>
<span class="sourceLineNo">240</span>  public static final boolean DEFAULT_CACHE_DATA_ON_WRITE = false;<a name="line.240"></a>
<span class="sourceLineNo">241</span><a name="line.241"></a>
<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
<span class="sourceLineNo">243</span>   * Default setting for whether to cache index blocks on write if block caching is enabled.<a name="line.243"></a>
<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
<span class="sourceLineNo">245</span>  public static final boolean DEFAULT_CACHE_INDEX_ON_WRITE = false;<a name="line.245"></a>
<span class="sourceLineNo">246</span><a name="line.246"></a>
<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
<span class="sourceLineNo">248</span>   * Default size of blocks in files stored to the filesytem (hfiles).<a name="line.248"></a>
<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
<span class="sourceLineNo">250</span>  public static final int DEFAULT_BLOCKSIZE = HConstants.DEFAULT_BLOCKSIZE;<a name="line.250"></a>
<span class="sourceLineNo">251</span><a name="line.251"></a>
<span class="sourceLineNo">252</span>  /**<a name="line.252"></a>
<span class="sourceLineNo">253</span>   * Default setting for whether or not to use bloomfilters.<a name="line.253"></a>
<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
<span class="sourceLineNo">255</span>  public static final BloomType DEFAULT_BLOOMFILTER = BloomType.ROW;<a name="line.255"></a>
<span class="sourceLineNo">256</span><a name="line.256"></a>
<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
<span class="sourceLineNo">258</span>   * Default setting for whether to cache bloom filter blocks on write if block caching is enabled.<a name="line.258"></a>
<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
<span class="sourceLineNo">260</span>  public static final boolean DEFAULT_CACHE_BLOOMS_ON_WRITE = false;<a name="line.260"></a>
<span class="sourceLineNo">261</span><a name="line.261"></a>
<span class="sourceLineNo">262</span>  /**<a name="line.262"></a>
<span class="sourceLineNo">263</span>   * Default time to live of cell contents.<a name="line.263"></a>
<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
<span class="sourceLineNo">265</span>  public static final int DEFAULT_TTL = HConstants.FOREVER;<a name="line.265"></a>
<span class="sourceLineNo">266</span><a name="line.266"></a>
<span class="sourceLineNo">267</span>  /**<a name="line.267"></a>
<span class="sourceLineNo">268</span>   * Default scope.<a name="line.268"></a>
<span class="sourceLineNo">269</span>   */<a name="line.269"></a>
<span class="sourceLineNo">270</span>  public static final int DEFAULT_REPLICATION_SCOPE = HConstants.REPLICATION_SCOPE_LOCAL;<a name="line.270"></a>
<span class="sourceLineNo">271</span><a name="line.271"></a>
<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
<span class="sourceLineNo">273</span>   * Default setting for whether to evict cached blocks from the blockcache on close.<a name="line.273"></a>
<span class="sourceLineNo">274</span>   */<a name="line.274"></a>
<span class="sourceLineNo">275</span>  public static final boolean DEFAULT_EVICT_BLOCKS_ON_CLOSE = false;<a name="line.275"></a>
<span class="sourceLineNo">276</span><a name="line.276"></a>
<span class="sourceLineNo">277</span>  /**<a name="line.277"></a>
<span class="sourceLineNo">278</span>   * Default compress tags along with any type of DataBlockEncoding.<a name="line.278"></a>
<span class="sourceLineNo">279</span>   */<a name="line.279"></a>
<span class="sourceLineNo">280</span>  public static final boolean DEFAULT_COMPRESS_TAGS = true;<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>   * Default setting for whether to prefetch blocks into the blockcache on open.<a name="line.283"></a>
<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
<span class="sourceLineNo">285</span>  public static final boolean DEFAULT_PREFETCH_BLOCKS_ON_OPEN = false;<a name="line.285"></a>
<span class="sourceLineNo">286</span><a name="line.286"></a>
<span class="sourceLineNo">287</span>  private final static Map&lt;String, String&gt; DEFAULT_VALUES = new HashMap&lt;&gt;();<a name="line.287"></a>
<span class="sourceLineNo">288</span><a name="line.288"></a>
<span class="sourceLineNo">289</span>  private static Map&lt;Bytes, Bytes&gt; getDefaultValuesBytes() {<a name="line.289"></a>
<span class="sourceLineNo">290</span>    Map&lt;Bytes, Bytes&gt; values = new HashMap&lt;&gt;();<a name="line.290"></a>
<span class="sourceLineNo">291</span>    DEFAULT_VALUES<a name="line.291"></a>
<span class="sourceLineNo">292</span>      .forEach((k, v) -&gt; values.put(new Bytes(Bytes.toBytes(k)), new Bytes(Bytes.toBytes(v))));<a name="line.292"></a>
<span class="sourceLineNo">293</span>    return values;<a name="line.293"></a>
<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
<span class="sourceLineNo">295</span><a name="line.295"></a>
<span class="sourceLineNo">296</span>  public static Map&lt;String, String&gt; getDefaultValues() {<a name="line.296"></a>
<span class="sourceLineNo">297</span>    return Collections.unmodifiableMap(DEFAULT_VALUES);<a name="line.297"></a>
<span class="sourceLineNo">298</span>  }<a name="line.298"></a>
<span class="sourceLineNo">299</span><a name="line.299"></a>
<span class="sourceLineNo">300</span>  private final static Set&lt;Bytes&gt; RESERVED_KEYWORDS = new HashSet&lt;&gt;();<a name="line.300"></a>
<span class="sourceLineNo">301</span><a name="line.301"></a>
<span class="sourceLineNo">302</span>  static {<a name="line.302"></a>
<span class="sourceLineNo">303</span>    DEFAULT_VALUES.put(BLOOMFILTER, DEFAULT_BLOOMFILTER.name());<a name="line.303"></a>
<span class="sourceLineNo">304</span>    DEFAULT_VALUES.put(REPLICATION_SCOPE, String.valueOf(DEFAULT_REPLICATION_SCOPE));<a name="line.304"></a>
<span class="sourceLineNo">305</span>    DEFAULT_VALUES.put(MAX_VERSIONS, String.valueOf(DEFAULT_MAX_VERSIONS));<a name="line.305"></a>
<span class="sourceLineNo">306</span>    DEFAULT_VALUES.put(MIN_VERSIONS, String.valueOf(DEFAULT_MIN_VERSIONS));<a name="line.306"></a>
<span class="sourceLineNo">307</span>    DEFAULT_VALUES.put(COMPRESSION, DEFAULT_COMPRESSION.name());<a name="line.307"></a>
<span class="sourceLineNo">308</span>    DEFAULT_VALUES.put(TTL, String.valueOf(DEFAULT_TTL));<a name="line.308"></a>
<span class="sourceLineNo">309</span>    DEFAULT_VALUES.put(BLOCKSIZE, String.valueOf(DEFAULT_BLOCKSIZE));<a name="line.309"></a>
<span class="sourceLineNo">310</span>    DEFAULT_VALUES.put(IN_MEMORY, String.valueOf(DEFAULT_IN_MEMORY));<a name="line.310"></a>
<span class="sourceLineNo">311</span>    DEFAULT_VALUES.put(BLOCKCACHE, String.valueOf(DEFAULT_BLOCKCACHE));<a name="line.311"></a>
<span class="sourceLineNo">312</span>    DEFAULT_VALUES.put(KEEP_DELETED_CELLS, String.valueOf(DEFAULT_KEEP_DELETED));<a name="line.312"></a>
<span class="sourceLineNo">313</span>    DEFAULT_VALUES.put(DATA_BLOCK_ENCODING, String.valueOf(DEFAULT_DATA_BLOCK_ENCODING));<a name="line.313"></a>
<span class="sourceLineNo">314</span>    DEFAULT_VALUES.put(INDEX_BLOCK_ENCODING, String.valueOf(DEFAULT_INDEX_BLOCK_ENCODING));<a name="line.314"></a>
<span class="sourceLineNo">315</span>    // Do NOT add this key/value by default. NEW_VERSION_BEHAVIOR is NOT defined in hbase1 so<a name="line.315"></a>
<span class="sourceLineNo">316</span>    // it is not possible to make an hbase1 HCD the same as an hbase2 HCD and so the replication<a name="line.316"></a>
<span class="sourceLineNo">317</span>    // compare of schemas will fail. It is OK not adding the below to the initial map because of<a name="line.317"></a>
<span class="sourceLineNo">318</span>    // fetch of this value, we will check for null and if null will return the default.<a name="line.318"></a>
<span class="sourceLineNo">319</span>    // DEFAULT_VALUES.put(NEW_VERSION_BEHAVIOR, String.valueOf(DEFAULT_NEW_VERSION_BEHAVIOR));<a name="line.319"></a>
<span class="sourceLineNo">320</span>    DEFAULT_VALUES.keySet().forEach(s -&gt; RESERVED_KEYWORDS.add(new Bytes(Bytes.toBytes(s))));<a name="line.320"></a>
<span class="sourceLineNo">321</span>    RESERVED_KEYWORDS.add(new Bytes(Bytes.toBytes(ENCRYPTION)));<a name="line.321"></a>
<span class="sourceLineNo">322</span>    RESERVED_KEYWORDS.add(new Bytes(Bytes.toBytes(ENCRYPTION_KEY)));<a name="line.322"></a>
<span class="sourceLineNo">323</span>    RESERVED_KEYWORDS.add(new Bytes(Bytes.toBytes(IS_MOB)));<a name="line.323"></a>
<span class="sourceLineNo">324</span>    RESERVED_KEYWORDS.add(new Bytes(Bytes.toBytes(MOB_THRESHOLD)));<a name="line.324"></a>
<span class="sourceLineNo">325</span>    RESERVED_KEYWORDS.add(new Bytes(Bytes.toBytes(MOB_COMPACT_PARTITION_POLICY)));<a name="line.325"></a>
<span class="sourceLineNo">326</span>  }<a name="line.326"></a>
<span class="sourceLineNo">327</span><a name="line.327"></a>
<span class="sourceLineNo">328</span>  public static Unit getUnit(String key) {<a name="line.328"></a>
<span class="sourceLineNo">329</span>    /* TTL for now, we can add more as we need */<a name="line.329"></a>
<span class="sourceLineNo">330</span>    switch (key) {<a name="line.330"></a>
<span class="sourceLineNo">331</span>      case TTL:<a name="line.331"></a>
<span class="sourceLineNo">332</span>        return Unit.TIME_INTERVAL;<a name="line.332"></a>
<span class="sourceLineNo">333</span>      case BLOCKSIZE:<a name="line.333"></a>
<span class="sourceLineNo">334</span>        return Unit.BYTE;<a name="line.334"></a>
<span class="sourceLineNo">335</span>      default:<a name="line.335"></a>
<span class="sourceLineNo">336</span>        return Unit.NONE;<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>  /**<a name="line.340"></a>
<span class="sourceLineNo">341</span>   * Check if the column family name is legal.<a name="line.341"></a>
<span class="sourceLineNo">342</span>   * @param b Family name.<a name="line.342"></a>
<span class="sourceLineNo">343</span>   * @return &lt;code&gt;b&lt;/code&gt;<a name="line.343"></a>
<span class="sourceLineNo">344</span>   * @throws IllegalArgumentException If not null and not a legitimate family name: i.e. 'printable'<a name="line.344"></a>
<span class="sourceLineNo">345</span>   *                                  and ends in a ':' (Null passes are allowed because<a name="line.345"></a>
<span class="sourceLineNo">346</span>   *                                  &lt;code&gt;b&lt;/code&gt; can be null when deserializing). Cannot start<a name="line.346"></a>
<span class="sourceLineNo">347</span>   *                                  with a '.' either. Also Family can not be an empty value or<a name="line.347"></a>
<span class="sourceLineNo">348</span>   *                                  equal "recovered.edits".<a name="line.348"></a>
<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
<span class="sourceLineNo">350</span>  public static byte[] isLegalColumnFamilyName(final byte[] b) {<a name="line.350"></a>
<span class="sourceLineNo">351</span>    if (b == null) {<a name="line.351"></a>
<span class="sourceLineNo">352</span>      return null;<a name="line.352"></a>
<span class="sourceLineNo">353</span>    }<a name="line.353"></a>
<span class="sourceLineNo">354</span>    Preconditions.checkArgument(b.length != 0, "Column Family name can not be empty");<a name="line.354"></a>
<span class="sourceLineNo">355</span>    if (b[0] == '.') {<a name="line.355"></a>
<span class="sourceLineNo">356</span>      throw new IllegalArgumentException(<a name="line.356"></a>
<span class="sourceLineNo">357</span>        "Column Family names cannot start with a " + "period: " + Bytes.toString(b));<a name="line.357"></a>
<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
<span class="sourceLineNo">359</span>    for (int i = 0; i &lt; b.length; i++) {<a name="line.359"></a>
<span class="sourceLineNo">360</span>      if (Character.isISOControl(b[i]) || b[i] == ':' || b[i] == '\\' || b[i] == '/') {<a name="line.360"></a>
<span class="sourceLineNo">361</span>        throw new IllegalArgumentException("Illegal character &lt;" + b[i]<a name="line.361"></a>
<span class="sourceLineNo">362</span>          + "&gt;. Column Family names cannot contain control characters or colons: "<a name="line.362"></a>
<span class="sourceLineNo">363</span>          + Bytes.toString(b));<a name="line.363"></a>
<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
<span class="sourceLineNo">366</span>    byte[] recoveredEdit = Bytes.toBytes(HConstants.RECOVERED_EDITS_DIR);<a name="line.366"></a>
<span class="sourceLineNo">367</span>    if (Bytes.equals(recoveredEdit, b)) {<a name="line.367"></a>
<span class="sourceLineNo">368</span>      throw new IllegalArgumentException(<a name="line.368"></a>
<span class="sourceLineNo">369</span>        "Column Family name cannot be: " + HConstants.RECOVERED_EDITS_DIR);<a name="line.369"></a>
<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
<span class="sourceLineNo">371</span>    return b;<a name="line.371"></a>
<span class="sourceLineNo">372</span>  }<a name="line.372"></a>
<span class="sourceLineNo">373</span><a name="line.373"></a>
<span class="sourceLineNo">374</span>  private final ModifyableColumnFamilyDescriptor desc;<a name="line.374"></a>
<span class="sourceLineNo">375</span><a name="line.375"></a>
<span class="sourceLineNo">376</span>  public static ColumnFamilyDescriptor parseFrom(final byte[] pbBytes)<a name="line.376"></a>
<span class="sourceLineNo">377</span>    throws DeserializationException {<a name="line.377"></a>
<span class="sourceLineNo">378</span>    return ModifyableColumnFamilyDescriptor.parseFrom(pbBytes);<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>  public static ColumnFamilyDescriptorBuilder newBuilder(final byte[] name) {<a name="line.381"></a>
<span class="sourceLineNo">382</span>    return new ColumnFamilyDescriptorBuilder(name);<a name="line.382"></a>
<span class="sourceLineNo">383</span>  }<a name="line.383"></a>
<span class="sourceLineNo">384</span><a name="line.384"></a>
<span class="sourceLineNo">385</span>  public static ColumnFamilyDescriptorBuilder newBuilder(final ColumnFamilyDescriptor desc) {<a name="line.385"></a>
<span class="sourceLineNo">386</span>    return new ColumnFamilyDescriptorBuilder(desc);<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>  public static ColumnFamilyDescriptor copy(ColumnFamilyDescriptor desc) {<a name="line.389"></a>
<span class="sourceLineNo">390</span>    return new ModifyableColumnFamilyDescriptor(desc);<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>  public static ColumnFamilyDescriptor of(String name) {<a name="line.393"></a>
<span class="sourceLineNo">394</span>    return of(Bytes.toBytes(name));<a name="line.394"></a>
<span class="sourceLineNo">395</span>  }<a name="line.395"></a>
<span class="sourceLineNo">396</span><a name="line.396"></a>
<span class="sourceLineNo">397</span>  public static ColumnFamilyDescriptor of(byte[] name) {<a name="line.397"></a>
<span class="sourceLineNo">398</span>    return newBuilder(name).build();<a name="line.398"></a>
<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
<span class="sourceLineNo">400</span><a name="line.400"></a>
<span class="sourceLineNo">401</span>  private ColumnFamilyDescriptorBuilder(final byte[] name) {<a name="line.401"></a>
<span class="sourceLineNo">402</span>    this.desc = new ModifyableColumnFamilyDescriptor(name);<a name="line.402"></a>
<span class="sourceLineNo">403</span>  }<a name="line.403"></a>
<span class="sourceLineNo">404</span><a name="line.404"></a>
<span class="sourceLineNo">405</span>  private ColumnFamilyDescriptorBuilder(final ColumnFamilyDescriptor desc) {<a name="line.405"></a>
<span class="sourceLineNo">406</span>    this.desc = new ModifyableColumnFamilyDescriptor(desc);<a name="line.406"></a>
<span class="sourceLineNo">407</span>  }<a name="line.407"></a>
<span class="sourceLineNo">408</span><a name="line.408"></a>
<span class="sourceLineNo">409</span>  /**<a name="line.409"></a>
<span class="sourceLineNo">410</span>   * Serialize the table descriptor to a byte array.<a name="line.410"></a>
<span class="sourceLineNo">411</span>   * @param desc The table descriptor to serialize<a name="line.411"></a>
<span class="sourceLineNo">412</span>   * @return This instance serialized with pb with pb magic prefix<a name="line.412"></a>
<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
<span class="sourceLineNo">414</span>  public static byte[] toByteArray(ColumnFamilyDescriptor desc) {<a name="line.414"></a>
<span class="sourceLineNo">415</span>    if (desc instanceof ModifyableColumnFamilyDescriptor) {<a name="line.415"></a>
<span class="sourceLineNo">416</span>      return ((ModifyableColumnFamilyDescriptor) desc).toByteArray();<a name="line.416"></a>
<span class="sourceLineNo">417</span>    }<a name="line.417"></a>
<span class="sourceLineNo">418</span>    return new ModifyableColumnFamilyDescriptor(desc).toByteArray();<a name="line.418"></a>
<span class="sourceLineNo">419</span>  }<a name="line.419"></a>
<span class="sourceLineNo">420</span><a name="line.420"></a>
<span class="sourceLineNo">421</span>  public ColumnFamilyDescriptor build() {<a name="line.421"></a>
<span class="sourceLineNo">422</span>    return new ModifyableColumnFamilyDescriptor(desc);<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>  public ColumnFamilyDescriptorBuilder removeConfiguration(String key) {<a name="line.425"></a>
<span class="sourceLineNo">426</span>    desc.removeConfiguration(key);<a name="line.426"></a>
<span class="sourceLineNo">427</span>    return this;<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>  public String getNameAsString() {<a name="line.430"></a>
<span class="sourceLineNo">431</span>    return desc.getNameAsString();<a name="line.431"></a>
<span class="sourceLineNo">432</span>  }<a name="line.432"></a>
<span class="sourceLineNo">433</span><a name="line.433"></a>
<span class="sourceLineNo">434</span>  public ColumnFamilyDescriptorBuilder setBlockCacheEnabled(boolean value) {<a name="line.434"></a>
<span class="sourceLineNo">435</span>    desc.setBlockCacheEnabled(value);<a name="line.435"></a>
<span class="sourceLineNo">436</span>    return this;<a name="line.436"></a>
<span class="sourceLineNo">437</span>  }<a name="line.437"></a>
<span class="sourceLineNo">438</span><a name="line.438"></a>
<span class="sourceLineNo">439</span>  public ColumnFamilyDescriptorBuilder setBlocksize(int value) {<a name="line.439"></a>
<span class="sourceLineNo">440</span>    desc.setBlocksize(value);<a name="line.440"></a>
<span class="sourceLineNo">441</span>    return this;<a name="line.441"></a>
<span class="sourceLineNo">442</span>  }<a name="line.442"></a>
<span class="sourceLineNo">443</span><a name="line.443"></a>
<span class="sourceLineNo">444</span>  public ColumnFamilyDescriptorBuilder setBlocksize(String value) throws HBaseException {<a name="line.444"></a>
<span class="sourceLineNo">445</span>    desc.setBlocksize(value);<a name="line.445"></a>
<span class="sourceLineNo">446</span>    return this;<a name="line.446"></a>
<span class="sourceLineNo">447</span>  }<a name="line.447"></a>
<span class="sourceLineNo">448</span><a name="line.448"></a>
<span class="sourceLineNo">449</span>  public ColumnFamilyDescriptorBuilder setBloomFilterType(final BloomType value) {<a name="line.449"></a>
<span class="sourceLineNo">450</span>    desc.setBloomFilterType(value);<a name="line.450"></a>
<span class="sourceLineNo">451</span>    return this;<a name="line.451"></a>
<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
<span class="sourceLineNo">453</span><a name="line.453"></a>
<span class="sourceLineNo">454</span>  public ColumnFamilyDescriptorBuilder setCacheBloomsOnWrite(boolean value) {<a name="line.454"></a>
<span class="sourceLineNo">455</span>    desc.setCacheBloomsOnWrite(value);<a name="line.455"></a>
<span class="sourceLineNo">456</span>    return this;<a name="line.456"></a>
<span class="sourceLineNo">457</span>  }<a name="line.457"></a>
<span class="sourceLineNo">458</span><a name="line.458"></a>
<span class="sourceLineNo">459</span>  public ColumnFamilyDescriptorBuilder setCacheDataOnWrite(boolean value) {<a name="line.459"></a>
<span class="sourceLineNo">460</span>    desc.setCacheDataOnWrite(value);<a name="line.460"></a>
<span class="sourceLineNo">461</span>    return this;<a name="line.461"></a>
<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
<span class="sourceLineNo">463</span><a name="line.463"></a>
<span class="sourceLineNo">464</span>  public ColumnFamilyDescriptorBuilder setCacheIndexesOnWrite(final boolean value) {<a name="line.464"></a>
<span class="sourceLineNo">465</span>    desc.setCacheIndexesOnWrite(value);<a name="line.465"></a>
<span class="sourceLineNo">466</span>    return this;<a name="line.466"></a>
<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
<span class="sourceLineNo">468</span><a name="line.468"></a>
<span class="sourceLineNo">469</span>  public ColumnFamilyDescriptorBuilder setCompactionCompressionType(Compression.Algorithm value) {<a name="line.469"></a>
<span class="sourceLineNo">470</span>    desc.setCompactionCompressionType(value);<a name="line.470"></a>
<span class="sourceLineNo">471</span>    return this;<a name="line.471"></a>
<span class="sourceLineNo">472</span>  }<a name="line.472"></a>
<span class="sourceLineNo">473</span><a name="line.473"></a>
<span class="sourceLineNo">474</span>  public ColumnFamilyDescriptorBuilder<a name="line.474"></a>
<span class="sourceLineNo">475</span>    setMajorCompactionCompressionType(Compression.Algorithm value) {<a name="line.475"></a>
<span class="sourceLineNo">476</span>    desc.setMajorCompactionCompressionType(value);<a name="line.476"></a>
<span class="sourceLineNo">477</span>    return this;<a name="line.477"></a>
<span class="sourceLineNo">478</span>  }<a name="line.478"></a>
<span class="sourceLineNo">479</span><a name="line.479"></a>
<span class="sourceLineNo">480</span>  public ColumnFamilyDescriptorBuilder<a name="line.480"></a>
<span class="sourceLineNo">481</span>    setMinorCompactionCompressionType(Compression.Algorithm value) {<a name="line.481"></a>
<span class="sourceLineNo">482</span>    desc.setMinorCompactionCompressionType(value);<a name="line.482"></a>
<span class="sourceLineNo">483</span>    return this;<a name="line.483"></a>
<span class="sourceLineNo">484</span>  }<a name="line.484"></a>
<span class="sourceLineNo">485</span><a name="line.485"></a>
<span class="sourceLineNo">486</span>  public ColumnFamilyDescriptorBuilder setCompressTags(boolean value) {<a name="line.486"></a>
<span class="sourceLineNo">487</span>    desc.setCompressTags(value);<a name="line.487"></a>
<span class="sourceLineNo">488</span>    return this;<a name="line.488"></a>
<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
<span class="sourceLineNo">490</span><a name="line.490"></a>
<span class="sourceLineNo">491</span>  public ColumnFamilyDescriptorBuilder setCompressionType(Compression.Algorithm value) {<a name="line.491"></a>
<span class="sourceLineNo">492</span>    desc.setCompressionType(value);<a name="line.492"></a>
<span class="sourceLineNo">493</span>    return this;<a name="line.493"></a>
<span class="sourceLineNo">494</span>  }<a name="line.494"></a>
<span class="sourceLineNo">495</span><a name="line.495"></a>
<span class="sourceLineNo">496</span>  public Compression.Algorithm getCompressionType() {<a name="line.496"></a>
<span class="sourceLineNo">497</span>    return desc.getCompressionType();<a name="line.497"></a>
<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
<span class="sourceLineNo">499</span><a name="line.499"></a>
<span class="sourceLineNo">500</span>  public ColumnFamilyDescriptorBuilder setConfiguration(final String key, final String value) {<a name="line.500"></a>
<span class="sourceLineNo">501</span>    desc.setConfiguration(key, value);<a name="line.501"></a>
<span class="sourceLineNo">502</span>    return this;<a name="line.502"></a>
<span class="sourceLineNo">503</span>  }<a name="line.503"></a>
<span class="sourceLineNo">504</span><a name="line.504"></a>
<span class="sourceLineNo">505</span>  public ColumnFamilyDescriptorBuilder setDFSReplication(short value) {<a name="line.505"></a>
<span class="sourceLineNo">506</span>    desc.setDFSReplication(value);<a name="line.506"></a>
<span class="sourceLineNo">507</span>    return this;<a name="line.507"></a>
<span class="sourceLineNo">508</span>  }<a name="line.508"></a>
<span class="sourceLineNo">509</span><a name="line.509"></a>
<span class="sourceLineNo">510</span>  public ColumnFamilyDescriptorBuilder setDataBlockEncoding(DataBlockEncoding value) {<a name="line.510"></a>
<span class="sourceLineNo">511</span>    desc.setDataBlockEncoding(value);<a name="line.511"></a>
<span class="sourceLineNo">512</span>    return this;<a name="line.512"></a>
<span class="sourceLineNo">513</span>  }<a name="line.513"></a>
<span class="sourceLineNo">514</span><a name="line.514"></a>
<span class="sourceLineNo">515</span>  public ColumnFamilyDescriptorBuilder setIndexBlockEncoding(IndexBlockEncoding value) {<a name="line.515"></a>
<span class="sourceLineNo">516</span>    desc.setIndexBlockEncoding(value);<a name="line.516"></a>
<span class="sourceLineNo">517</span>    return this;<a name="line.517"></a>
<span class="sourceLineNo">518</span>  }<a name="line.518"></a>
<span class="sourceLineNo">519</span><a name="line.519"></a>
<span class="sourceLineNo">520</span>  public ColumnFamilyDescriptorBuilder setEncryptionKey(final byte[] value) {<a name="line.520"></a>
<span class="sourceLineNo">521</span>    desc.setEncryptionKey(value);<a name="line.521"></a>
<span class="sourceLineNo">522</span>    return this;<a name="line.522"></a>
<span class="sourceLineNo">523</span>  }<a name="line.523"></a>
<span class="sourceLineNo">524</span><a name="line.524"></a>
<span class="sourceLineNo">525</span>  public ColumnFamilyDescriptorBuilder setEncryptionType(String value) {<a name="line.525"></a>
<span class="sourceLineNo">526</span>    desc.setEncryptionType(value);<a name="line.526"></a>
<span class="sourceLineNo">527</span>    return this;<a name="line.527"></a>
<span class="sourceLineNo">528</span>  }<a name="line.528"></a>
<span class="sourceLineNo">529</span><a name="line.529"></a>
<span class="sourceLineNo">530</span>  public ColumnFamilyDescriptorBuilder setEvictBlocksOnClose(boolean value) {<a name="line.530"></a>
<span class="sourceLineNo">531</span>    desc.setEvictBlocksOnClose(value);<a name="line.531"></a>
<span class="sourceLineNo">532</span>    return this;<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>  public ColumnFamilyDescriptorBuilder setInMemory(final boolean value) {<a name="line.535"></a>
<span class="sourceLineNo">536</span>    desc.setInMemory(value);<a name="line.536"></a>
<span class="sourceLineNo">537</span>    return this;<a name="line.537"></a>
<span class="sourceLineNo">538</span>  }<a name="line.538"></a>
<span class="sourceLineNo">539</span><a name="line.539"></a>
<span class="sourceLineNo">540</span>  public ColumnFamilyDescriptorBuilder setInMemoryCompaction(final MemoryCompactionPolicy value) {<a name="line.540"></a>
<span class="sourceLineNo">541</span>    desc.setInMemoryCompaction(value);<a name="line.541"></a>
<span class="sourceLineNo">542</span>    return this;<a name="line.542"></a>
<span class="sourceLineNo">543</span>  }<a name="line.543"></a>
<span class="sourceLineNo">544</span><a name="line.544"></a>
<span class="sourceLineNo">545</span>  public ColumnFamilyDescriptorBuilder setKeepDeletedCells(KeepDeletedCells value) {<a name="line.545"></a>
<span class="sourceLineNo">546</span>    desc.setKeepDeletedCells(value);<a name="line.546"></a>
<span class="sourceLineNo">547</span>    return this;<a name="line.547"></a>
<span class="sourceLineNo">548</span>  }<a name="line.548"></a>
<span class="sourceLineNo">549</span><a name="line.549"></a>
<span class="sourceLineNo">550</span>  public ColumnFamilyDescriptorBuilder setMaxVersions(final int value) {<a name="line.550"></a>
<span class="sourceLineNo">551</span>    desc.setMaxVersions(value);<a name="line.551"></a>
<span class="sourceLineNo">552</span>    return this;<a name="line.552"></a>
<span class="sourceLineNo">553</span>  }<a name="line.553"></a>
<span class="sourceLineNo">554</span><a name="line.554"></a>
<span class="sourceLineNo">555</span>  public ColumnFamilyDescriptorBuilder setMinVersions(final int value) {<a name="line.555"></a>
<span class="sourceLineNo">556</span>    desc.setMinVersions(value);<a name="line.556"></a>
<span class="sourceLineNo">557</span>    return this;<a name="line.557"></a>
<span class="sourceLineNo">558</span>  }<a name="line.558"></a>
<span class="sourceLineNo">559</span><a name="line.559"></a>
<span class="sourceLineNo">560</span>  public ColumnFamilyDescriptorBuilder<a name="line.560"></a>
<span class="sourceLineNo">561</span>    setMobCompactPartitionPolicy(final MobCompactPartitionPolicy value) {<a name="line.561"></a>
<span class="sourceLineNo">562</span>    desc.setMobCompactPartitionPolicy(value);<a name="line.562"></a>
<span class="sourceLineNo">563</span>    return this;<a name="line.563"></a>
<span class="sourceLineNo">564</span>  }<a name="line.564"></a>
<span class="sourceLineNo">565</span><a name="line.565"></a>
<span class="sourceLineNo">566</span>  public ColumnFamilyDescriptorBuilder setMobEnabled(final boolean value) {<a name="line.566"></a>
<span class="sourceLineNo">567</span>    desc.setMobEnabled(value);<a name="line.567"></a>
<span class="sourceLineNo">568</span>    return this;<a name="line.568"></a>
<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
<span class="sourceLineNo">570</span><a name="line.570"></a>
<span class="sourceLineNo">571</span>  public ColumnFamilyDescriptorBuilder setMobThreshold(final long value) {<a name="line.571"></a>
<span class="sourceLineNo">572</span>    desc.setMobThreshold(value);<a name="line.572"></a>
<span class="sourceLineNo">573</span>    return this;<a name="line.573"></a>
<span class="sourceLineNo">574</span>  }<a name="line.574"></a>
<span class="sourceLineNo">575</span><a name="line.575"></a>
<span class="sourceLineNo">576</span>  public ColumnFamilyDescriptorBuilder setPrefetchBlocksOnOpen(final boolean value) {<a name="line.576"></a>
<span class="sourceLineNo">577</span>    desc.setPrefetchBlocksOnOpen(value);<a name="line.577"></a>
<span class="sourceLineNo">578</span>    return this;<a name="line.578"></a>
<span class="sourceLineNo">579</span>  }<a name="line.579"></a>
<span class="sourceLineNo">580</span><a name="line.580"></a>
<span class="sourceLineNo">581</span>  public ColumnFamilyDescriptorBuilder setScope(final int value) {<a name="line.581"></a>
<span class="sourceLineNo">582</span>    desc.setScope(value);<a name="line.582"></a>
<span class="sourceLineNo">583</span>    return this;<a name="line.583"></a>
<span class="sourceLineNo">584</span>  }<a name="line.584"></a>
<span class="sourceLineNo">585</span><a name="line.585"></a>
<span class="sourceLineNo">586</span>  public ColumnFamilyDescriptorBuilder setStoragePolicy(final String value) {<a name="line.586"></a>
<span class="sourceLineNo">587</span>    desc.setStoragePolicy(value);<a name="line.587"></a>
<span class="sourceLineNo">588</span>    return this;<a name="line.588"></a>
<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
<span class="sourceLineNo">590</span><a name="line.590"></a>
<span class="sourceLineNo">591</span>  public ColumnFamilyDescriptorBuilder setTimeToLive(final int value) {<a name="line.591"></a>
<span class="sourceLineNo">592</span>    desc.setTimeToLive(value);<a name="line.592"></a>
<span class="sourceLineNo">593</span>    return this;<a name="line.593"></a>
<span class="sourceLineNo">594</span>  }<a name="line.594"></a>
<span class="sourceLineNo">595</span><a name="line.595"></a>
<span class="sourceLineNo">596</span>  public ColumnFamilyDescriptorBuilder setTimeToLive(final String value) throws HBaseException {<a name="line.596"></a>
<span class="sourceLineNo">597</span>    desc.setTimeToLive(value);<a name="line.597"></a>
<span class="sourceLineNo">598</span>    return this;<a name="line.598"></a>
<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
<span class="sourceLineNo">600</span><a name="line.600"></a>
<span class="sourceLineNo">601</span>  public ColumnFamilyDescriptorBuilder setNewVersionBehavior(final boolean value) {<a name="line.601"></a>
<span class="sourceLineNo">602</span>    desc.setNewVersionBehavior(value);<a name="line.602"></a>
<span class="sourceLineNo">603</span>    return this;<a name="line.603"></a>
<span class="sourceLineNo">604</span>  }<a name="line.604"></a>
<span class="sourceLineNo">605</span><a name="line.605"></a>
<span class="sourceLineNo">606</span>  public ColumnFamilyDescriptorBuilder setValue(final Bytes key, final Bytes value) {<a name="line.606"></a>
<span class="sourceLineNo">607</span>    desc.setValue(key, value);<a name="line.607"></a>
<span class="sourceLineNo">608</span>    return this;<a name="line.608"></a>
<span class="sourceLineNo">609</span>  }<a name="line.609"></a>
<span class="sourceLineNo">610</span><a name="line.610"></a>
<span class="sourceLineNo">611</span>  public ColumnFamilyDescriptorBuilder setValue(final byte[] key, final byte[] value) {<a name="line.611"></a>
<span class="sourceLineNo">612</span>    desc.setValue(key, value);<a name="line.612"></a>
<span class="sourceLineNo">613</span>    return this;<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>  public ColumnFamilyDescriptorBuilder setValue(final String key, final String value) {<a name="line.616"></a>
<span class="sourceLineNo">617</span>    desc.setValue(key, value);<a name="line.617"></a>
<span class="sourceLineNo">618</span>    return this;<a name="line.618"></a>
<span class="sourceLineNo">619</span>  }<a name="line.619"></a>
<span class="sourceLineNo">620</span><a name="line.620"></a>
<span class="sourceLineNo">621</span>  public ColumnFamilyDescriptorBuilder setVersionsWithTimeToLive(final int retentionInterval,<a name="line.621"></a>
<span class="sourceLineNo">622</span>    final int versionAfterInterval) {<a name="line.622"></a>
<span class="sourceLineNo">623</span>    desc.setVersionsWithTimeToLive(retentionInterval, versionAfterInterval);<a name="line.623"></a>
<span class="sourceLineNo">624</span>    return this;<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>   * An ModifyableFamilyDescriptor contains information about a column family such as the number of<a name="line.628"></a>
<span class="sourceLineNo">629</span>   * versions, compression settings, etc. It is used as input when creating a table or adding a<a name="line.629"></a>
<span class="sourceLineNo">630</span>   * column.<a name="line.630"></a>
<span class="sourceLineNo">631</span>   */<a name="line.631"></a>
<span class="sourceLineNo">632</span>  private static final class ModifyableColumnFamilyDescriptor<a name="line.632"></a>
<span class="sourceLineNo">633</span>    implements ColumnFamilyDescriptor, Comparable&lt;ModifyableColumnFamilyDescriptor&gt; {<a name="line.633"></a>
<span class="sourceLineNo">634</span><a name="line.634"></a>
<span class="sourceLineNo">635</span>    // Column family name<a name="line.635"></a>
<span class="sourceLineNo">636</span>    private final byte[] name;<a name="line.636"></a>
<span class="sourceLineNo">637</span><a name="line.637"></a>
<span class="sourceLineNo">638</span>    // Column metadata<a name="line.638"></a>
<span class="sourceLineNo">639</span>    private final Map&lt;Bytes, Bytes&gt; values = new HashMap&lt;&gt;();<a name="line.639"></a>
<span class="sourceLineNo">640</span><a name="line.640"></a>
<span class="sourceLineNo">641</span>    /**<a name="line.641"></a>
<span class="sourceLineNo">642</span>     * A map which holds the configuration specific to the column family. The keys of the map have<a name="line.642"></a>
<span class="sourceLineNo">643</span>     * the same names as config keys and override the defaults with cf-specific settings. Example<a name="line.643"></a>
<span class="sourceLineNo">644</span>     * usage may be for compactions, etc.<a name="line.644"></a>
<span class="sourceLineNo">645</span>     */<a name="line.645"></a>
<span class="sourceLineNo">646</span>    private final Map&lt;String, String&gt; configuration = new HashMap&lt;&gt;();<a name="line.646"></a>
<span class="sourceLineNo">647</span><a name="line.647"></a>
<span class="sourceLineNo">648</span>    /**<a name="line.648"></a>
<span class="sourceLineNo">649</span>     * Construct a column descriptor specifying only the family name The other attributes are<a name="line.649"></a>
<span class="sourceLineNo">650</span>     * defaulted.<a name="line.650"></a>
<span class="sourceLineNo">651</span>     * @param name Column family name. Must be 'printable' -- digit or letter -- and may not contain<a name="line.651"></a>
<span class="sourceLineNo">652</span>     *             a &lt;code&gt;:&lt;/code&gt; TODO: make this private after the HCD is removed.<a name="line.652"></a>
<span class="sourceLineNo">653</span>     */<a name="line.653"></a>
<span class="sourceLineNo">654</span>    @InterfaceAudience.Private<a name="line.654"></a>
<span class="sourceLineNo">655</span>    public ModifyableColumnFamilyDescriptor(final byte[] name) {<a name="line.655"></a>
<span class="sourceLineNo">656</span>      this(isLegalColumnFamilyName(name), getDefaultValuesBytes(), Collections.emptyMap());<a name="line.656"></a>
<span class="sourceLineNo">657</span>    }<a name="line.657"></a>
<span class="sourceLineNo">658</span><a name="line.658"></a>
<span class="sourceLineNo">659</span>    /**<a name="line.659"></a>
<span class="sourceLineNo">660</span>     * Constructor. Makes a deep copy of the supplied descriptor. TODO: make this private after the<a name="line.660"></a>
<span class="sourceLineNo">661</span>     * HCD is removed.<a name="line.661"></a>
<span class="sourceLineNo">662</span>     * @param desc The descriptor.<a name="line.662"></a>
<span class="sourceLineNo">663</span>     */<a name="line.663"></a>
<span class="sourceLineNo">664</span>    @InterfaceAudience.Private<a name="line.664"></a>
<span class="sourceLineNo">665</span>    public ModifyableColumnFamilyDescriptor(ColumnFamilyDescriptor desc) {<a name="line.665"></a>
<span class="sourceLineNo">666</span>      this(desc.getName(), desc.getValues(), desc.getConfiguration());<a name="line.666"></a>
<span class="sourceLineNo">667</span>    }<a name="line.667"></a>
<span class="sourceLineNo">668</span><a name="line.668"></a>
<span class="sourceLineNo">669</span>    private ModifyableColumnFamilyDescriptor(byte[] name, Map&lt;Bytes, Bytes&gt; values,<a name="line.669"></a>
<span class="sourceLineNo">670</span>      Map&lt;String, String&gt; config) {<a name="line.670"></a>
<span class="sourceLineNo">671</span>      this.name = name;<a name="line.671"></a>
<span class="sourceLineNo">672</span>      this.values.putAll(values);<a name="line.672"></a>
<span class="sourceLineNo">673</span>      this.configuration.putAll(config);<a name="line.673"></a>
<span class="sourceLineNo">674</span>    }<a name="line.674"></a>
<span class="sourceLineNo">675</span><a name="line.675"></a>
<span class="sourceLineNo">676</span>    @Override<a name="line.676"></a>
<span class="sourceLineNo">677</span>    public byte[] getName() {<a name="line.677"></a>
<span class="sourceLineNo">678</span>      return Bytes.copy(name);<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>    @Override<a name="line.681"></a>
<span class="sourceLineNo">682</span>    public String getNameAsString() {<a name="line.682"></a>
<span class="sourceLineNo">683</span>      return Bytes.toString(name);<a name="line.683"></a>
<span class="sourceLineNo">684</span>    }<a name="line.684"></a>
<span class="sourceLineNo">685</span><a name="line.685"></a>
<span class="sourceLineNo">686</span>    @Override<a name="line.686"></a>
<span class="sourceLineNo">687</span>    public Bytes getValue(Bytes key) {<a name="line.687"></a>
<span class="sourceLineNo">688</span>      return values.get(key);<a name="line.688"></a>
<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
<span class="sourceLineNo">690</span><a name="line.690"></a>
<span class="sourceLineNo">691</span>    @Override<a name="line.691"></a>
<span class="sourceLineNo">692</span>    public byte[] getValue(byte[] key) {<a name="line.692"></a>
<span class="sourceLineNo">693</span>      Bytes value = values.get(new Bytes(key));<a name="line.693"></a>
<span class="sourceLineNo">694</span>      return value == null ? null : value.get();<a name="line.694"></a>
<span class="sourceLineNo">695</span>    }<a name="line.695"></a>
<span class="sourceLineNo">696</span><a name="line.696"></a>
<span class="sourceLineNo">697</span>    @Override<a name="line.697"></a>
<span class="sourceLineNo">698</span>    public String getValue(String key) {<a name="line.698"></a>
<span class="sourceLineNo">699</span>      Bytes rval = values.get(new Bytes(Bytes.toBytes(key)));<a name="line.699"></a>
<span class="sourceLineNo">700</span>      return rval == null ? null : Bytes.toString(rval.get(), rval.getOffset(), rval.getLength());<a name="line.700"></a>
<span class="sourceLineNo">701</span>    }<a name="line.701"></a>
<span class="sourceLineNo">702</span><a name="line.702"></a>
<span class="sourceLineNo">703</span>    @Override<a name="line.703"></a>
<span class="sourceLineNo">704</span>    public Map&lt;Bytes, Bytes&gt; getValues() {<a name="line.704"></a>
<span class="sourceLineNo">705</span>      return Collections.unmodifiableMap(values);<a name="line.705"></a>
<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
<span class="sourceLineNo">707</span><a name="line.707"></a>
<span class="sourceLineNo">708</span>    public ModifyableColumnFamilyDescriptor setValue(byte[] key, byte[] value) {<a name="line.708"></a>
<span class="sourceLineNo">709</span>      return setValue(toBytesOrNull(key, Function.identity()),<a name="line.709"></a>
<span class="sourceLineNo">710</span>        toBytesOrNull(value, Function.identity()));<a name="line.710"></a>
<span class="sourceLineNo">711</span>    }<a name="line.711"></a>
<span class="sourceLineNo">712</span><a name="line.712"></a>
<span class="sourceLineNo">713</span>    public ModifyableColumnFamilyDescriptor setValue(String key, String value) {<a name="line.713"></a>
<span class="sourceLineNo">714</span>      return setValue(toBytesOrNull(key, Bytes::toBytes), toBytesOrNull(value, Bytes::toBytes));<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">717</span>    private ModifyableColumnFamilyDescriptor setValue(Bytes key, String value) {<a name="line.717"></a>
<span class="sourceLineNo">718</span>      return setValue(key, toBytesOrNull(value, Bytes::toBytes));<a name="line.718"></a>
<span class="sourceLineNo">719</span>    }<a name="line.719"></a>
<span class="sourceLineNo">720</span><a name="line.720"></a>
<span class="sourceLineNo">721</span>    private ModifyableColumnFamilyDescriptor setValue(Bytes key, Bytes value) {<a name="line.721"></a>
<span class="sourceLineNo">722</span>      if (value == null || value.getLength() == 0) {<a name="line.722"></a>
<span class="sourceLineNo">723</span>        values.remove(key);<a name="line.723"></a>
<span class="sourceLineNo">724</span>      } else {<a name="line.724"></a>
<span class="sourceLineNo">725</span>        values.put(key, value);<a name="line.725"></a>
<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
<span class="sourceLineNo">727</span>      return this;<a name="line.727"></a>
<span class="sourceLineNo">728</span>    }<a name="line.728"></a>
<span class="sourceLineNo">729</span><a name="line.729"></a>
<span class="sourceLineNo">730</span>    private static &lt;T&gt; Bytes toBytesOrNull(T t, Function&lt;T, byte[]&gt; f) {<a name="line.730"></a>
<span class="sourceLineNo">731</span>      if (t == null) {<a name="line.731"></a>
<span class="sourceLineNo">732</span>        return null;<a name="line.732"></a>
<span class="sourceLineNo">733</span>      } else {<a name="line.733"></a>
<span class="sourceLineNo">734</span>        return new Bytes(f.apply(t));<a name="line.734"></a>
<span class="sourceLineNo">735</span>      }<a name="line.735"></a>
<span class="sourceLineNo">736</span>    }<a name="line.736"></a>
<span class="sourceLineNo">737</span><a name="line.737"></a>
<span class="sourceLineNo">738</span>    private &lt;T&gt; T getStringOrDefault(Bytes key, Function&lt;String, T&gt; function, T defaultValue) {<a name="line.738"></a>
<span class="sourceLineNo">739</span>      return getOrDefault(key, b -&gt; function.apply(Bytes.toString(b)), defaultValue);<a name="line.739"></a>
<span class="sourceLineNo">740</span>    }<a name="line.740"></a>
<span class="sourceLineNo">741</span><a name="line.741"></a>
<span class="sourceLineNo">742</span>    private &lt;T&gt; T getOrDefault(Bytes key, Function&lt;byte[], T&gt; function, T defaultValue) {<a name="line.742"></a>
<span class="sourceLineNo">743</span>      Bytes value = values.get(key);<a name="line.743"></a>
<span class="sourceLineNo">744</span>      if (value == null) {<a name="line.744"></a>
<span class="sourceLineNo">745</span>        return defaultValue;<a name="line.745"></a>
<span class="sourceLineNo">746</span>      } else {<a name="line.746"></a>
<span class="sourceLineNo">747</span>        return function.apply(value.get());<a name="line.747"></a>
<span class="sourceLineNo">748</span>      }<a name="line.748"></a>
<span class="sourceLineNo">749</span>    }<a name="line.749"></a>
<span class="sourceLineNo">750</span><a name="line.750"></a>
<span class="sourceLineNo">751</span>    @Override<a name="line.751"></a>
<span class="sourceLineNo">752</span>    public int getMaxVersions() {<a name="line.752"></a>
<span class="sourceLineNo">753</span>      return getStringOrDefault(MAX_VERSIONS_BYTES, Integer::parseInt, DEFAULT_MAX_VERSIONS);<a name="line.753"></a>
<span class="sourceLineNo">754</span>    }<a name="line.754"></a>
<span class="sourceLineNo">755</span><a name="line.755"></a>
<span class="sourceLineNo">756</span>    /**<a name="line.756"></a>
<span class="sourceLineNo">757</span>     * Set the maximum number of versions to retain.<a name="line.757"></a>
<span class="sourceLineNo">758</span>     * @param maxVersions maximum number of versions<a name="line.758"></a>
<span class="sourceLineNo">759</span>     * @return this (for chained invocation)<a name="line.759"></a>
<span class="sourceLineNo">760</span>     */<a name="line.760"></a>
<span class="sourceLineNo">761</span>    public ModifyableColumnFamilyDescriptor setMaxVersions(int maxVersions) {<a name="line.761"></a>
<span class="sourceLineNo">762</span>      if (maxVersions &lt;= 0) {<a name="line.762"></a>
<span class="sourceLineNo">763</span>        // TODO: Allow maxVersion of 0 to be the way you say "Keep all versions".<a name="line.763"></a>
<span class="sourceLineNo">764</span>        // Until there is support, consider 0 or &lt; 0 -- a configuration error.<a name="line.764"></a>
<span class="sourceLineNo">765</span>        throw new IllegalArgumentException("Maximum versions must be positive");<a name="line.765"></a>
<span class="sourceLineNo">766</span>      }<a name="line.766"></a>
<span class="sourceLineNo">767</span>      if (maxVersions &lt; this.getMinVersions()) {<a name="line.767"></a>
<span class="sourceLineNo">768</span>        throw new IllegalArgumentException(<a name="line.768"></a>
<span class="sourceLineNo">769</span>          "Set MaxVersion to " + maxVersions + " while minVersion is " + this.getMinVersions()<a name="line.769"></a>
<span class="sourceLineNo">770</span>            + ". Maximum versions must be &gt;= minimum versions ");<a name="line.770"></a>
<span class="sourceLineNo">771</span>      }<a name="line.771"></a>
<span class="sourceLineNo">772</span>      setValue(MAX_VERSIONS_BYTES, Integer.toString(maxVersions));<a name="line.772"></a>
<span class="sourceLineNo">773</span>      return this;<a name="line.773"></a>
<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
<span class="sourceLineNo">775</span><a name="line.775"></a>
<span class="sourceLineNo">776</span>    /**<a name="line.776"></a>
<span class="sourceLineNo">777</span>     * Set minimum and maximum versions to keep.<a name="line.777"></a>
<span class="sourceLineNo">778</span>     * @param minVersions minimal number of versions<a name="line.778"></a>
<span class="sourceLineNo">779</span>     * @param maxVersions maximum number of versions<a name="line.779"></a>
<span class="sourceLineNo">780</span>     * @return this (for chained invocation)<a name="line.780"></a>
<span class="sourceLineNo">781</span>     */<a name="line.781"></a>
<span class="sourceLineNo">782</span>    public ModifyableColumnFamilyDescriptor setVersions(int minVersions, int maxVersions) {<a name="line.782"></a>
<span class="sourceLineNo">783</span>      if (minVersions &lt;= 0) {<a name="line.783"></a>
<span class="sourceLineNo">784</span>        // TODO: Allow minVersion and maxVersion of 0 to be the way you say "Keep all versions".<a name="line.784"></a>
<span class="sourceLineNo">785</span>        // Until there is support, consider 0 or &lt; 0 -- a configuration error.<a name="line.785"></a>
<span class="sourceLineNo">786</span>        throw new IllegalArgumentException("Minimum versions must be positive");<a name="line.786"></a>
<span class="sourceLineNo">787</span>      }<a name="line.787"></a>
<span class="sourceLineNo">788</span><a name="line.788"></a>
<span class="sourceLineNo">789</span>      if (maxVersions &lt; minVersions) {<a name="line.789"></a>
<span class="sourceLineNo">790</span>        throw new IllegalArgumentException(<a name="line.790"></a>
<span class="sourceLineNo">791</span>          "Unable to set MaxVersion to " + maxVersions + " and set MinVersion to " + minVersions<a name="line.791"></a>
<span class="sourceLineNo">792</span>            + ", as maximum versions must be &gt;= minimum versions.");<a name="line.792"></a>
<span class="sourceLineNo">793</span>      }<a name="line.793"></a>
<span class="sourceLineNo">794</span>      setMinVersions(minVersions);<a name="line.794"></a>
<span class="sourceLineNo">795</span>      setMaxVersions(maxVersions);<a name="line.795"></a>
<span class="sourceLineNo">796</span>      return this;<a name="line.796"></a>
<span class="sourceLineNo">797</span>    }<a name="line.797"></a>
<span class="sourceLineNo">798</span><a name="line.798"></a>
<span class="sourceLineNo">799</span>    @Override<a name="line.799"></a>
<span class="sourceLineNo">800</span>    public int getBlocksize() {<a name="line.800"></a>
<span class="sourceLineNo">801</span>      return getStringOrDefault(BLOCKSIZE_BYTES, Integer::valueOf, DEFAULT_BLOCKSIZE);<a name="line.801"></a>
<span class="sourceLineNo">802</span>    }<a name="line.802"></a>
<span class="sourceLineNo">803</span><a name="line.803"></a>
<span class="sourceLineNo">804</span>    public ModifyableColumnFamilyDescriptor setBlocksize(int s) {<a name="line.804"></a>
<span class="sourceLineNo">805</span>      return setValue(BLOCKSIZE_BYTES, Integer.toString(s));<a name="line.805"></a>
<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
<span class="sourceLineNo">807</span><a name="line.807"></a>
<span class="sourceLineNo">808</span>    public ModifyableColumnFamilyDescriptor setBlocksize(String blocksize) throws HBaseException {<a name="line.808"></a>
<span class="sourceLineNo">809</span>      return setBlocksize(<a name="line.809"></a>
<span class="sourceLineNo">810</span>        Integer.parseInt(PrettyPrinter.valueOf(blocksize, PrettyPrinter.Unit.BYTE)));<a name="line.810"></a>
<span class="sourceLineNo">811</span>    }<a name="line.811"></a>
<span class="sourceLineNo">812</span><a name="line.812"></a>
<span class="sourceLineNo">813</span>    @Override<a name="line.813"></a>
<span class="sourceLineNo">814</span>    public Compression.Algorithm getCompressionType() {<a name="line.814"></a>
<span class="sourceLineNo">815</span>      return getStringOrDefault(COMPRESSION_BYTES,<a name="line.815"></a>
<span class="sourceLineNo">816</span>        n -&gt; Compression.Algorithm.valueOf(n.toUpperCase()), DEFAULT_COMPRESSION);<a name="line.816"></a>
<span class="sourceLineNo">817</span>    }<a name="line.817"></a>
<span class="sourceLineNo">818</span><a name="line.818"></a>
<span class="sourceLineNo">819</span>    /**<a name="line.819"></a>
<span class="sourceLineNo">820</span>     * Compression types supported in hbase. LZO is not bundled as part of the hbase distribution.<a name="line.820"></a>
<span class="sourceLineNo">821</span>     * See See &lt;a href="http://hbase.apache.org/book.html#lzo.compression"&gt;LZO Compression&lt;/a&gt; for<a name="line.821"></a>
<span class="sourceLineNo">822</span>     * how to enable it.<a name="line.822"></a>
<span class="sourceLineNo">823</span>     * @param type Compression type setting.<a name="line.823"></a>
<span class="sourceLineNo">824</span>     * @return this (for chained invocation)<a name="line.824"></a>
<span class="sourceLineNo">825</span>     */<a name="line.825"></a>
<span class="sourceLineNo">826</span>    public ModifyableColumnFamilyDescriptor setCompressionType(Compression.Algorithm type) {<a name="line.826"></a>
<span class="sourceLineNo">827</span>      return setValue(COMPRESSION_BYTES, type.name());<a name="line.827"></a>
<span class="sourceLineNo">828</span>    }<a name="line.828"></a>
<span class="sourceLineNo">829</span><a name="line.829"></a>
<span class="sourceLineNo">830</span>    @Override<a name="line.830"></a>
<span class="sourceLineNo">831</span>    public DataBlockEncoding getDataBlockEncoding() {<a name="line.831"></a>
<span class="sourceLineNo">832</span>      return getStringOrDefault(DATA_BLOCK_ENCODING_BYTES,<a name="line.832"></a>
<span class="sourceLineNo">833</span>        n -&gt; DataBlockEncoding.valueOf(n.toUpperCase()), DataBlockEncoding.NONE);<a name="line.833"></a>
<span class="sourceLineNo">834</span>    }<a name="line.834"></a>
<span class="sourceLineNo">835</span><a name="line.835"></a>
<span class="sourceLineNo">836</span>    /**<a name="line.836"></a>
<span class="sourceLineNo">837</span>     * Set data block encoding algorithm used in block cache.<a name="line.837"></a>
<span class="sourceLineNo">838</span>     * @param type What kind of data block encoding will be used.<a name="line.838"></a>
<span class="sourceLineNo">839</span>     * @return this (for chained invocation)<a name="line.839"></a>
<span class="sourceLineNo">840</span>     */<a name="line.840"></a>
<span class="sourceLineNo">841</span>    public ModifyableColumnFamilyDescriptor setDataBlockEncoding(DataBlockEncoding type) {<a name="line.841"></a>
<span class="sourceLineNo">842</span>      return setValue(DATA_BLOCK_ENCODING_BYTES,<a name="line.842"></a>
<span class="sourceLineNo">843</span>        type == null ? DataBlockEncoding.NONE.name() : type.name());<a name="line.843"></a>
<span class="sourceLineNo">844</span>    }<a name="line.844"></a>
<span class="sourceLineNo">845</span><a name="line.845"></a>
<span class="sourceLineNo">846</span>    @Override<a name="line.846"></a>
<span class="sourceLineNo">847</span>    public IndexBlockEncoding getIndexBlockEncoding() {<a name="line.847"></a>
<span class="sourceLineNo">848</span>      return getStringOrDefault(INDEX_BLOCK_ENCODING_BYTES,<a name="line.848"></a>
<span class="sourceLineNo">849</span>        n -&gt; IndexBlockEncoding.valueOf(n.toUpperCase()), IndexBlockEncoding.NONE);<a name="line.849"></a>
<span class="sourceLineNo">850</span>    }<a name="line.850"></a>
<span class="sourceLineNo">851</span><a name="line.851"></a>
<span class="sourceLineNo">852</span>    /**<a name="line.852"></a>
<span class="sourceLineNo">853</span>     * Set index block encoding algorithm used in block cache.<a name="line.853"></a>
<span class="sourceLineNo">854</span>     * @param type What kind of index block encoding will be used.<a name="line.854"></a>
<span class="sourceLineNo">855</span>     * @return this (for chained invocation)<a name="line.855"></a>
<span class="sourceLineNo">856</span>     */<a name="line.856"></a>
<span class="sourceLineNo">857</span>    public ModifyableColumnFamilyDescriptor setIndexBlockEncoding(IndexBlockEncoding type) {<a name="line.857"></a>
<span class="sourceLineNo">858</span>      return setValue(INDEX_BLOCK_ENCODING_BYTES,<a name="line.858"></a>
<span class="sourceLineNo">859</span>        type == null ? IndexBlockEncoding.NONE.name() : type.name());<a name="line.859"></a>
<span class="sourceLineNo">860</span>    }<a name="line.860"></a>
<span class="sourceLineNo">861</span><a name="line.861"></a>
<span class="sourceLineNo">862</span>    /**<a name="line.862"></a>
<span class="sourceLineNo">863</span>     * Set whether the tags should be compressed along with DataBlockEncoding. When no<a name="line.863"></a>
<span class="sourceLineNo">864</span>     * DataBlockEncoding is been used, this is having no effect.<a name="line.864"></a>
<span class="sourceLineNo">865</span>     * @return this (for chained invocation)<a name="line.865"></a>
<span class="sourceLineNo">866</span>     */<a name="line.866"></a>
<span class="sourceLineNo">867</span>    public ModifyableColumnFamilyDescriptor setCompressTags(boolean compressTags) {<a name="line.867"></a>
<span class="sourceLineNo">868</span>      return setValue(COMPRESS_TAGS_BYTES, String.valueOf(compressTags));<a name="line.868"></a>
<span class="sourceLineNo">869</span>    }<a name="line.869"></a>
<span class="sourceLineNo">870</span><a name="line.870"></a>
<span class="sourceLineNo">871</span>    @Override<a name="line.871"></a>
<span class="sourceLineNo">872</span>    public boolean isCompressTags() {<a name="line.872"></a>
<span class="sourceLineNo">873</span>      return getStringOrDefault(COMPRESS_TAGS_BYTES, Boolean::valueOf, DEFAULT_COMPRESS_TAGS);<a name="line.873"></a>
<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
<span class="sourceLineNo">875</span><a name="line.875"></a>
<span class="sourceLineNo">876</span>    @Override<a name="line.876"></a>
<span class="sourceLineNo">877</span>    public Compression.Algorithm getCompactionCompressionType() {<a name="line.877"></a>
<span class="sourceLineNo">878</span>      return getStringOrDefault(COMPRESSION_COMPACT_BYTES,<a name="line.878"></a>
<span class="sourceLineNo">879</span>        n -&gt; Compression.Algorithm.valueOf(n.toUpperCase()), getCompressionType());<a name="line.879"></a>
<span class="sourceLineNo">880</span>    }<a name="line.880"></a>
<span class="sourceLineNo">881</span><a name="line.881"></a>
<span class="sourceLineNo">882</span>    @Override<a name="line.882"></a>
<span class="sourceLineNo">883</span>    public Compression.Algorithm getMajorCompactionCompressionType() {<a name="line.883"></a>
<span class="sourceLineNo">884</span>      return getStringOrDefault(COMPRESSION_COMPACT_MAJOR_BYTES,<a name="line.884"></a>
<span class="sourceLineNo">885</span>        n -&gt; Compression.Algorithm.valueOf(n.toUpperCase()), getCompactionCompressionType());<a name="line.885"></a>
<span class="sourceLineNo">886</span>    }<a name="line.886"></a>
<span class="sourceLineNo">887</span><a name="line.887"></a>
<span class="sourceLineNo">888</span>    @Override<a name="line.888"></a>
<span class="sourceLineNo">889</span>    public Compression.Algorithm getMinorCompactionCompressionType() {<a name="line.889"></a>
<span class="sourceLineNo">890</span>      return getStringOrDefault(COMPRESSION_COMPACT_MINOR_BYTES,<a name="line.890"></a>
<span class="sourceLineNo">891</span>        n -&gt; Compression.Algorithm.valueOf(n.toUpperCase()), getCompactionCompressionType());<a name="line.891"></a>
<span class="sourceLineNo">892</span>    }<a name="line.892"></a>
<span class="sourceLineNo">893</span><a name="line.893"></a>
<span class="sourceLineNo">894</span>    /**<a name="line.894"></a>
<span class="sourceLineNo">895</span>     * Compression types supported in hbase. LZO is not bundled as part of the hbase distribution.<a name="line.895"></a>
<span class="sourceLineNo">896</span>     * See See &lt;a href="http://hbase.apache.org/book.html#lzo.compression"&gt;LZO Compression&lt;/a&gt; for<a name="line.896"></a>
<span class="sourceLineNo">897</span>     * how to enable it.<a name="line.897"></a>
<span class="sourceLineNo">898</span>     * @param type Compression type setting.<a name="line.898"></a>
<span class="sourceLineNo">899</span>     * @return this (for chained invocation)<a name="line.899"></a>
<span class="sourceLineNo">900</span>     */<a name="line.900"></a>
<span class="sourceLineNo">901</span>    public ModifyableColumnFamilyDescriptor<a name="line.901"></a>
<span class="sourceLineNo">902</span>      setCompactionCompressionType(Compression.Algorithm type) {<a name="line.902"></a>
<span class="sourceLineNo">903</span>      return setValue(COMPRESSION_COMPACT_BYTES, type.name());<a name="line.903"></a>
<span class="sourceLineNo">904</span>    }<a name="line.904"></a>
<span class="sourceLineNo">905</span><a name="line.905"></a>
<span class="sourceLineNo">906</span>    public ModifyableColumnFamilyDescriptor<a name="line.906"></a>
<span class="sourceLineNo">907</span>      setMajorCompactionCompressionType(Compression.Algorithm type) {<a name="line.907"></a>
<span class="sourceLineNo">908</span>      return setValue(COMPRESSION_COMPACT_MAJOR_BYTES, type.name());<a name="line.908"></a>
<span class="sourceLineNo">909</span>    }<a name="line.909"></a>
<span class="sourceLineNo">910</span><a name="line.910"></a>
<span class="sourceLineNo">911</span>    public ModifyableColumnFamilyDescriptor<a name="line.911"></a>
<span class="sourceLineNo">912</span>      setMinorCompactionCompressionType(Compression.Algorithm type) {<a name="line.912"></a>
<span class="sourceLineNo">913</span>      return setValue(COMPRESSION_COMPACT_MINOR_BYTES, type.name());<a name="line.913"></a>
<span class="sourceLineNo">914</span>    }<a name="line.914"></a>
<span class="sourceLineNo">915</span><a name="line.915"></a>
<span class="sourceLineNo">916</span>    @Override<a name="line.916"></a>
<span class="sourceLineNo">917</span>    public boolean isInMemory() {<a name="line.917"></a>
<span class="sourceLineNo">918</span>      return getStringOrDefault(IN_MEMORY_BYTES, Boolean::valueOf, DEFAULT_IN_MEMORY);<a name="line.918"></a>
<span class="sourceLineNo">919</span>    }<a name="line.919"></a>
<span class="sourceLineNo">920</span><a name="line.920"></a>
<span class="sourceLineNo">921</span>    /**<a name="line.921"></a>
<span class="sourceLineNo">922</span>     * Set the inMemory flag<a name="line.922"></a>
<span class="sourceLineNo">923</span>     * @param inMemory True if we are to favor keeping all values for this column family in the<a name="line.923"></a>
<span class="sourceLineNo">924</span>     *                 HRegionServer cache<a name="line.924"></a>
<span class="sourceLineNo">925</span>     * @return this (for chained invocation)<a name="line.925"></a>
<span class="sourceLineNo">926</span>     */<a name="line.926"></a>
<span class="sourceLineNo">927</span>    public ModifyableColumnFamilyDescriptor setInMemory(boolean inMemory) {<a name="line.927"></a>
<span class="sourceLineNo">928</span>      return setValue(IN_MEMORY_BYTES, Boolean.toString(inMemory));<a name="line.928"></a>
<span class="sourceLineNo">929</span>    }<a name="line.929"></a>
<span class="sourceLineNo">930</span><a name="line.930"></a>
<span class="sourceLineNo">931</span>    @Override<a name="line.931"></a>
<span class="sourceLineNo">932</span>    public MemoryCompactionPolicy getInMemoryCompaction() {<a name="line.932"></a>
<span class="sourceLineNo">933</span>      return getStringOrDefault(IN_MEMORY_COMPACTION_BYTES,<a name="line.933"></a>
<span class="sourceLineNo">934</span>        n -&gt; MemoryCompactionPolicy.valueOf(n.toUpperCase()), null);<a name="line.934"></a>
<span class="sourceLineNo">935</span>    }<a name="line.935"></a>
<span class="sourceLineNo">936</span><a name="line.936"></a>
<span class="sourceLineNo">937</span>    public ModifyableColumnFamilyDescriptor<a name="line.937"></a>
<span class="sourceLineNo">938</span>      setInMemoryCompaction(MemoryCompactionPolicy inMemoryCompaction) {<a name="line.938"></a>
<span class="sourceLineNo">939</span>      return setValue(IN_MEMORY_COMPACTION_BYTES, inMemoryCompaction.name());<a name="line.939"></a>
<span class="sourceLineNo">940</span>    }<a name="line.940"></a>
<span class="sourceLineNo">941</span><a name="line.941"></a>
<span class="sourceLineNo">942</span>    @Override<a name="line.942"></a>
<span class="sourceLineNo">943</span>    public KeepDeletedCells getKeepDeletedCells() {<a name="line.943"></a>
<span class="sourceLineNo">944</span>      return getStringOrDefault(KEEP_DELETED_CELLS_BYTES, KeepDeletedCells::getValue,<a name="line.944"></a>
<span class="sourceLineNo">945</span>        DEFAULT_KEEP_DELETED);<a name="line.945"></a>
<span class="sourceLineNo">946</span>    }<a name="line.946"></a>
<span class="sourceLineNo">947</span><a name="line.947"></a>
<span class="sourceLineNo">948</span>    public ModifyableColumnFamilyDescriptor setKeepDeletedCells(KeepDeletedCells keepDeletedCells) {<a name="line.948"></a>
<span class="sourceLineNo">949</span>      return setValue(KEEP_DELETED_CELLS_BYTES, keepDeletedCells.name());<a name="line.949"></a>
<span class="sourceLineNo">950</span>    }<a name="line.950"></a>
<span class="sourceLineNo">951</span><a name="line.951"></a>
<span class="sourceLineNo">952</span>    /**<a name="line.952"></a>
<span class="sourceLineNo">953</span>     * By default, HBase only consider timestamp in versions. So a previous Delete with higher ts<a name="line.953"></a>
<span class="sourceLineNo">954</span>     * will mask a later Put with lower ts. Set this to true to enable new semantics of versions. We<a name="line.954"></a>
<span class="sourceLineNo">955</span>     * will also consider mvcc in versions. See HBASE-15968 for details.<a name="line.955"></a>
<span class="sourceLineNo">956</span>     */<a name="line.956"></a>
<span class="sourceLineNo">957</span>    @Override<a name="line.957"></a>
<span class="sourceLineNo">958</span>    public boolean isNewVersionBehavior() {<a name="line.958"></a>
<span class="sourceLineNo">959</span>      return getStringOrDefault(NEW_VERSION_BEHAVIOR_BYTES, Boolean::parseBoolean,<a name="line.959"></a>
<span class="sourceLineNo">960</span>        DEFAULT_NEW_VERSION_BEHAVIOR);<a name="line.960"></a>
<span class="sourceLineNo">961</span>    }<a name="line.961"></a>
<span class="sourceLineNo">962</span><a name="line.962"></a>
<span class="sourceLineNo">963</span>    public ModifyableColumnFamilyDescriptor setNewVersionBehavior(boolean newVersionBehavior) {<a name="line.963"></a>
<span class="sourceLineNo">964</span>      return setValue(NEW_VERSION_BEHAVIOR_BYTES, Boolean.toString(newVersionBehavior));<a name="line.964"></a>
<span class="sourceLineNo">965</span>    }<a name="line.965"></a>
<span class="sourceLineNo">966</span><a name="line.966"></a>
<span class="sourceLineNo">967</span>    @Override<a name="line.967"></a>
<span class="sourceLineNo">968</span>    public int getTimeToLive() {<a name="line.968"></a>
<span class="sourceLineNo">969</span>      return getStringOrDefault(TTL_BYTES, Integer::parseInt, DEFAULT_TTL);<a name="line.969"></a>
<span class="sourceLineNo">970</span>    }<a name="line.970"></a>
<span class="sourceLineNo">971</span><a name="line.971"></a>
<span class="sourceLineNo">972</span>    /**<a name="line.972"></a>
<span class="sourceLineNo">973</span>     * Set the time to live<a name="line.973"></a>
<span class="sourceLineNo">974</span>     * @param timeToLive Time-to-live of cell contents, in seconds.<a name="line.974"></a>
<span class="sourceLineNo">975</span>     * @return this (for chained invocation)<a name="line.975"></a>
<span class="sourceLineNo">976</span>     */<a name="line.976"></a>
<span class="sourceLineNo">977</span>    public ModifyableColumnFamilyDescriptor setTimeToLive(int timeToLive) {<a name="line.977"></a>
<span class="sourceLineNo">978</span>      return setValue(TTL_BYTES, Integer.toString(timeToLive));<a name="line.978"></a>
<span class="sourceLineNo">979</span>    }<a name="line.979"></a>
<span class="sourceLineNo">980</span><a name="line.980"></a>
<span class="sourceLineNo">981</span>    /**<a name="line.981"></a>
<span class="sourceLineNo">982</span>     * Set the time to live<a name="line.982"></a>
<span class="sourceLineNo">983</span>     * @param timeToLive Time-to-live of cell contents, in seconds.<a name="line.983"></a>
<span class="sourceLineNo">984</span>     * @return this (for chained invocation)<a name="line.984"></a>
<span class="sourceLineNo">985</span>     * @throws org.apache.hadoop.hbase.exceptions.HBaseException exception<a name="line.985"></a>
<span class="sourceLineNo">986</span>     */<a name="line.986"></a>
<span class="sourceLineNo">987</span>    public ModifyableColumnFamilyDescriptor setTimeToLive(String timeToLive) throws HBaseException {<a name="line.987"></a>
<span class="sourceLineNo">988</span>      return setTimeToLive(Integer.parseInt(PrettyPrinter.valueOf(timeToLive, Unit.TIME_INTERVAL)));<a name="line.988"></a>
<span class="sourceLineNo">989</span>    }<a name="line.989"></a>
<span class="sourceLineNo">990</span><a name="line.990"></a>
<span class="sourceLineNo">991</span>    @Override<a name="line.991"></a>
<span class="sourceLineNo">992</span>    public int getMinVersions() {<a name="line.992"></a>
<span class="sourceLineNo">993</span>      return getStringOrDefault(MIN_VERSIONS_BYTES, Integer::valueOf, DEFAULT_MIN_VERSIONS);<a name="line.993"></a>
<span class="sourceLineNo">994</span>    }<a name="line.994"></a>
<span class="sourceLineNo">995</span><a name="line.995"></a>
<span class="sourceLineNo">996</span>    /**<a name="line.996"></a>
<span class="sourceLineNo">997</span>     * Set minimum versions to retain.<a name="line.997"></a>
<span class="sourceLineNo">998</span>     * @param minVersions The minimum number of versions to keep. (used when timeToLive is set)<a name="line.998"></a>
<span class="sourceLineNo">999</span>     * @return this (for chained invocation)<a name="line.999"></a>
<span class="sourceLineNo">1000</span>     */<a name="line.1000"></a>
<span class="sourceLineNo">1001</span>    public ModifyableColumnFamilyDescriptor setMinVersions(int minVersions) {<a name="line.1001"></a>
<span class="sourceLineNo">1002</span>      return setValue(MIN_VERSIONS_BYTES, Integer.toString(minVersions));<a name="line.1002"></a>
<span class="sourceLineNo">1003</span>    }<a name="line.1003"></a>
<span class="sourceLineNo">1004</span><a name="line.1004"></a>
<span class="sourceLineNo">1005</span>    /**<a name="line.1005"></a>
<span class="sourceLineNo">1006</span>     * Retain all versions for a given TTL(retentionInterval), and then only a specific number of<a name="line.1006"></a>
<span class="sourceLineNo">1007</span>     * versions(versionAfterInterval) after that interval elapses.<a name="line.1007"></a>
<span class="sourceLineNo">1008</span>     * @param retentionInterval    Retain all versions for this interval<a name="line.1008"></a>
<span class="sourceLineNo">1009</span>     * @param versionAfterInterval Retain no of versions to retain after retentionInterval<a name="line.1009"></a>
<span class="sourceLineNo">1010</span>     * @return this (for chained invocation)<a name="line.1010"></a>
<span class="sourceLineNo">1011</span>     */<a name="line.1011"></a>
<span class="sourceLineNo">1012</span>    public ModifyableColumnFamilyDescriptor setVersionsWithTimeToLive(final int retentionInterval,<a name="line.1012"></a>
<span class="sourceLineNo">1013</span>      final int versionAfterInterval) {<a name="line.1013"></a>
<span class="sourceLineNo">1014</span>      ModifyableColumnFamilyDescriptor modifyableColumnFamilyDescriptor =<a name="line.1014"></a>
<span class="sourceLineNo">1015</span>        setVersions(versionAfterInterval, Integer.MAX_VALUE);<a name="line.1015"></a>
<span class="sourceLineNo">1016</span>      modifyableColumnFamilyDescriptor.setTimeToLive(retentionInterval);<a name="line.1016"></a>
<span class="sourceLineNo">1017</span>      modifyableColumnFamilyDescriptor.setKeepDeletedCells(KeepDeletedCells.TTL);<a name="line.1017"></a>
<span class="sourceLineNo">1018</span>      return modifyableColumnFamilyDescriptor;<a name="line.1018"></a>
<span class="sourceLineNo">1019</span>    }<a name="line.1019"></a>
<span class="sourceLineNo">1020</span><a name="line.1020"></a>
<span class="sourceLineNo">1021</span>    @Override<a name="line.1021"></a>
<span class="sourceLineNo">1022</span>    public boolean isBlockCacheEnabled() {<a name="line.1022"></a>
<span class="sourceLineNo">1023</span>      return getStringOrDefault(BLOCKCACHE_BYTES, Boolean::valueOf, DEFAULT_BLOCKCACHE);<a name="line.1023"></a>
<span class="sourceLineNo">1024</span>    }<a name="line.1024"></a>
<span class="sourceLineNo">1025</span><a name="line.1025"></a>
<span class="sourceLineNo">1026</span>    /**<a name="line.1026"></a>
<span class="sourceLineNo">1027</span>     * Set the blockCacheEnabled flag<a name="line.1027"></a>
<span class="sourceLineNo">1028</span>     * @param blockCacheEnabled True if hfile DATA type blocks should be cached (We always cache<a name="line.1028"></a>
<span class="sourceLineNo">1029</span>     *                          INDEX and BLOOM blocks; you cannot turn this off).<a name="line.1029"></a>
<span class="sourceLineNo">1030</span>     * @return this (for chained invocation)<a name="line.1030"></a>
<span class="sourceLineNo">1031</span>     */<a name="line.1031"></a>
<span class="sourceLineNo">1032</span>    public ModifyableColumnFamilyDescriptor setBlockCacheEnabled(boolean blockCacheEnabled) {<a name="line.1032"></a>
<span class="sourceLineNo">1033</span>      return setValue(BLOCKCACHE_BYTES, Boolean.toString(blockCacheEnabled));<a name="line.1033"></a>
<span class="sourceLineNo">1034</span>    }<a name="line.1034"></a>
<span class="sourceLineNo">1035</span><a name="line.1035"></a>
<span class="sourceLineNo">1036</span>    @Override<a name="line.1036"></a>
<span class="sourceLineNo">1037</span>    public BloomType getBloomFilterType() {<a name="line.1037"></a>
<span class="sourceLineNo">1038</span>      return getStringOrDefault(BLOOMFILTER_BYTES, n -&gt; BloomType.valueOf(n.toUpperCase()),<a name="line.1038"></a>
<span class="sourceLineNo">1039</span>        DEFAULT_BLOOMFILTER);<a name="line.1039"></a>
<span class="sourceLineNo">1040</span>    }<a name="line.1040"></a>
<span class="sourceLineNo">1041</span><a name="line.1041"></a>
<span class="sourceLineNo">1042</span>    public ModifyableColumnFamilyDescriptor setBloomFilterType(final BloomType bt) {<a name="line.1042"></a>
<span class="sourceLineNo">1043</span>      return setValue(BLOOMFILTER_BYTES, bt.name());<a name="line.1043"></a>
<span class="sourceLineNo">1044</span>    }<a name="line.1044"></a>
<span class="sourceLineNo">1045</span><a name="line.1045"></a>
<span class="sourceLineNo">1046</span>    @Override<a name="line.1046"></a>
<span class="sourceLineNo">1047</span>    public int getScope() {<a name="line.1047"></a>
<span class="sourceLineNo">1048</span>      return getStringOrDefault(REPLICATION_SCOPE_BYTES, Integer::valueOf,<a name="line.1048"></a>
<span class="sourceLineNo">1049</span>        DEFAULT_REPLICATION_SCOPE);<a name="line.1049"></a>
<span class="sourceLineNo">1050</span>    }<a name="line.1050"></a>
<span class="sourceLineNo">1051</span><a name="line.1051"></a>
<span class="sourceLineNo">1052</span>    public ModifyableColumnFamilyDescriptor setScope(int scope) {<a name="line.1052"></a>
<span class="sourceLineNo">1053</span>      return setValue(REPLICATION_SCOPE_BYTES, Integer.toString(scope));<a name="line.1053"></a>
<span class="sourceLineNo">1054</span>    }<a name="line.1054"></a>
<span class="sourceLineNo">1055</span><a name="line.1055"></a>
<span class="sourceLineNo">1056</span>    @Override<a name="line.1056"></a>
<span class="sourceLineNo">1057</span>    public boolean isCacheDataOnWrite() {<a name="line.1057"></a>
<span class="sourceLineNo">1058</span>      return getStringOrDefault(CACHE_DATA_ON_WRITE_BYTES, Boolean::valueOf,<a name="line.1058"></a>
<span class="sourceLineNo">1059</span>        DEFAULT_CACHE_DATA_ON_WRITE);<a name="line.1059"></a>
<span class="sourceLineNo">1060</span>    }<a name="line.1060"></a>
<span class="sourceLineNo">1061</span><a name="line.1061"></a>
<span class="sourceLineNo">1062</span>    /**<a name="line.1062"></a>
<span class="sourceLineNo">1063</span>     * Set the setCacheDataOnWrite flag<a name="line.1063"></a>
<span class="sourceLineNo">1064</span>     * @param value true if we should cache data blocks on write<a name="line.1064"></a>
<span class="sourceLineNo">1065</span>     * @return this (for chained invocation)<a name="line.1065"></a>
<span class="sourceLineNo">1066</span>     */<a name="line.1066"></a>
<span class="sourceLineNo">1067</span>    public ModifyableColumnFamilyDescriptor setCacheDataOnWrite(boolean value) {<a name="line.1067"></a>
<span class="sourceLineNo">1068</span>      return setValue(CACHE_DATA_ON_WRITE_BYTES, Boolean.toString(value));<a name="line.1068"></a>
<span class="sourceLineNo">1069</span>    }<a name="line.1069"></a>
<span class="sourceLineNo">1070</span><a name="line.1070"></a>
<span class="sourceLineNo">1071</span>    @Override<a name="line.1071"></a>
<span class="sourceLineNo">1072</span>    public boolean isCacheIndexesOnWrite() {<a name="line.1072"></a>
<span class="sourceLineNo">1073</span>      return getStringOrDefault(CACHE_INDEX_ON_WRITE_BYTES, Boolean::valueOf,<a name="line.1073"></a>
<span class="sourceLineNo">1074</span>        DEFAULT_CACHE_INDEX_ON_WRITE);<a name="line.1074"></a>
<span class="sourceLineNo">1075</span>    }<a name="line.1075"></a>
<span class="sourceLineNo">1076</span><a name="line.1076"></a>
<span class="sourceLineNo">1077</span>    /**<a name="line.1077"></a>
<span class="sourceLineNo">1078</span>     * Set the setCacheIndexesOnWrite flag<a name="line.1078"></a>
<span class="sourceLineNo">1079</span>     * @param value true if we should cache index blocks on write<a name="line.1079"></a>
<span class="sourceLineNo">1080</span>     * @return this (for chained invocation)<a name="line.1080"></a>
<span class="sourceLineNo">1081</span>     */<a name="line.1081"></a>
<span class="sourceLineNo">1082</span>    public ModifyableColumnFamilyDescriptor setCacheIndexesOnWrite(boolean value) {<a name="line.1082"></a>
<span class="sourceLineNo">1083</span>      return setValue(CACHE_INDEX_ON_WRITE_BYTES, Boolean.toString(value));<a name="line.1083"></a>
<span class="sourceLineNo">1084</span>    }<a name="line.1084"></a>
<span class="sourceLineNo">1085</span><a name="line.1085"></a>
<span class="sourceLineNo">1086</span>    @Override<a name="line.1086"></a>
<span class="sourceLineNo">1087</span>    public boolean isCacheBloomsOnWrite() {<a name="line.1087"></a>
<span class="sourceLineNo">1088</span>      return getStringOrDefault(CACHE_BLOOMS_ON_WRITE_BYTES, Boolean::valueOf,<a name="line.1088"></a>
<span class="sourceLineNo">1089</span>        DEFAULT_CACHE_BLOOMS_ON_WRITE);<a name="line.1089"></a>
<span class="sourceLineNo">1090</span>    }<a name="line.1090"></a>
<span class="sourceLineNo">1091</span><a name="line.1091"></a>
<span class="sourceLineNo">1092</span>    /**<a name="line.1092"></a>
<span class="sourceLineNo">1093</span>     * Set the setCacheBloomsOnWrite flag.<a name="line.1093"></a>
<span class="sourceLineNo">1094</span>     * @param value true if we should cache bloomfilter blocks on write<a name="line.1094"></a>
<span class="sourceLineNo">1095</span>     * @return this (for chained invocation)<a name="line.1095"></a>
<span class="sourceLineNo">1096</span>     */<a name="line.1096"></a>
<span class="sourceLineNo">1097</span>    public ModifyableColumnFamilyDescriptor setCacheBloomsOnWrite(boolean value) {<a name="line.1097"></a>
<span class="sourceLineNo">1098</span>      return setValue(CACHE_BLOOMS_ON_WRITE_BYTES, Boolean.toString(value));<a name="line.1098"></a>
<span class="sourceLineNo">1099</span>    }<a name="line.1099"></a>
<span class="sourceLineNo">1100</span><a name="line.1100"></a>
<span class="sourceLineNo">1101</span>    @Override<a name="line.1101"></a>
<span class="sourceLineNo">1102</span>    public boolean isEvictBlocksOnClose() {<a name="line.1102"></a>
<span class="sourceLineNo">1103</span>      return getStringOrDefault(EVICT_BLOCKS_ON_CLOSE_BYTES, Boolean::valueOf,<a name="line.1103"></a>
<span class="sourceLineNo">1104</span>        DEFAULT_EVICT_BLOCKS_ON_CLOSE);<a name="line.1104"></a>
<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
<span class="sourceLineNo">1106</span><a name="line.1106"></a>
<span class="sourceLineNo">1107</span>    /**<a name="line.1107"></a>
<span class="sourceLineNo">1108</span>     * Set the setEvictBlocksOnClose flag.<a name="line.1108"></a>
<span class="sourceLineNo">1109</span>     * @param value true if we should evict cached blocks from the blockcache on close<a name="line.1109"></a>
<span class="sourceLineNo">1110</span>     * @return this (for chained invocation)<a name="line.1110"></a>
<span class="sourceLineNo">1111</span>     */<a name="line.1111"></a>
<span class="sourceLineNo">1112</span>    public ModifyableColumnFamilyDescriptor setEvictBlocksOnClose(boolean value) {<a name="line.1112"></a>
<span class="sourceLineNo">1113</span>      return setValue(EVICT_BLOCKS_ON_CLOSE_BYTES, Boolean.toString(value));<a name="line.1113"></a>
<span class="sourceLineNo">1114</span>    }<a name="line.1114"></a>
<span class="sourceLineNo">1115</span><a name="line.1115"></a>
<span class="sourceLineNo">1116</span>    @Override<a name="line.1116"></a>
<span class="sourceLineNo">1117</span>    public boolean isPrefetchBlocksOnOpen() {<a name="line.1117"></a>
<span class="sourceLineNo">1118</span>      return getStringOrDefault(PREFETCH_BLOCKS_ON_OPEN_BYTES, Boolean::valueOf,<a name="line.1118"></a>
<span class="sourceLineNo">1119</span>        DEFAULT_PREFETCH_BLOCKS_ON_OPEN);<a name="line.1119"></a>
<span class="sourceLineNo">1120</span>    }<a name="line.1120"></a>
<span class="sourceLineNo">1121</span><a name="line.1121"></a>
<span class="sourceLineNo">1122</span>    /**<a name="line.1122"></a>
<span class="sourceLineNo">1123</span>     * Set the setPrefetchBlocksOnOpen flag<a name="line.1123"></a>
<span class="sourceLineNo">1124</span>     * @param value true if we should prefetch blocks into the blockcache on open<a name="line.1124"></a>
<span class="sourceLineNo">1125</span>     * @return this (for chained invocation)<a name="line.1125"></a>
<span class="sourceLineNo">1126</span>     */<a name="line.1126"></a>
<span class="sourceLineNo">1127</span>    public ModifyableColumnFamilyDescriptor setPrefetchBlocksOnOpen(boolean value) {<a name="line.1127"></a>
<span class="sourceLineNo">1128</span>      return setValue(PREFETCH_BLOCKS_ON_OPEN_BYTES, Boolean.toString(value));<a name="line.1128"></a>
<span class="sourceLineNo">1129</span>    }<a name="line.1129"></a>
<span class="sourceLineNo">1130</span><a name="line.1130"></a>
<span class="sourceLineNo">1131</span>    @Override<a name="line.1131"></a>
<span class="sourceLineNo">1132</span>    public String toString() {<a name="line.1132"></a>
<span class="sourceLineNo">1133</span>      StringBuilder s = new StringBuilder();<a name="line.1133"></a>
<span class="sourceLineNo">1134</span>      s.append('{');<a name="line.1134"></a>
<span class="sourceLineNo">1135</span>      s.append(HConstants.NAME);<a name="line.1135"></a>
<span class="sourceLineNo">1136</span>      s.append(" =&gt; '");<a name="line.1136"></a>
<span class="sourceLineNo">1137</span>      s.append(getNameAsString());<a name="line.1137"></a>
<span class="sourceLineNo">1138</span>      s.append("'");<a name="line.1138"></a>
<span class="sourceLineNo">1139</span>      s.append(getValues(true));<a name="line.1139"></a>
<span class="sourceLineNo">1140</span>      s.append('}');<a name="line.1140"></a>
<span class="sourceLineNo">1141</span>      return s.toString();<a name="line.1141"></a>
<span class="sourceLineNo">1142</span>    }<a name="line.1142"></a>
<span class="sourceLineNo">1143</span><a name="line.1143"></a>
<span class="sourceLineNo">1144</span>    @Override<a name="line.1144"></a>
<span class="sourceLineNo">1145</span>    public String toStringCustomizedValues() {<a name="line.1145"></a>
<span class="sourceLineNo">1146</span>      StringBuilder s = new StringBuilder();<a name="line.1146"></a>
<span class="sourceLineNo">1147</span>      s.append('{');<a name="line.1147"></a>
<span class="sourceLineNo">1148</span>      s.append(HConstants.NAME);<a name="line.1148"></a>
<span class="sourceLineNo">1149</span>      s.append(" =&gt; '");<a name="line.1149"></a>
<span class="sourceLineNo">1150</span>      s.append(getNameAsString());<a name="line.1150"></a>
<span class="sourceLineNo">1151</span>      s.append("'");<a name="line.1151"></a>
<span class="sourceLineNo">1152</span>      s.append(getValues(false));<a name="line.1152"></a>
<span class="sourceLineNo">1153</span>      s.append('}');<a name="line.1153"></a>
<span class="sourceLineNo">1154</span>      return s.toString();<a name="line.1154"></a>
<span class="sourceLineNo">1155</span>    }<a name="line.1155"></a>
<span class="sourceLineNo">1156</span><a name="line.1156"></a>
<span class="sourceLineNo">1157</span>    private StringBuilder getValues(boolean printDefaults) {<a name="line.1157"></a>
<span class="sourceLineNo">1158</span>      StringBuilder s = new StringBuilder();<a name="line.1158"></a>
<span class="sourceLineNo">1159</span><a name="line.1159"></a>
<span class="sourceLineNo">1160</span>      boolean hasConfigKeys = false;<a name="line.1160"></a>
<span class="sourceLineNo">1161</span><a name="line.1161"></a>
<span class="sourceLineNo">1162</span>      // print all reserved keys first<a name="line.1162"></a>
<span class="sourceLineNo">1163</span>      for (Map.Entry&lt;Bytes, Bytes&gt; entry : values.entrySet()) {<a name="line.1163"></a>
<span class="sourceLineNo">1164</span>        if (!RESERVED_KEYWORDS.contains(entry.getKey())) {<a name="line.1164"></a>
<span class="sourceLineNo">1165</span>          hasConfigKeys = true;<a name="line.1165"></a>
<span class="sourceLineNo">1166</span>          continue;<a name="line.1166"></a>
<span class="sourceLineNo">1167</span>        }<a name="line.1167"></a>
<span class="sourceLineNo">1168</span>        String key = Bytes.toString(entry.getKey().get());<a name="line.1168"></a>
<span class="sourceLineNo">1169</span>        String value = Bytes.toStringBinary(entry.getValue().get());<a name="line.1169"></a>
<span class="sourceLineNo">1170</span>        if (<a name="line.1170"></a>
<span class="sourceLineNo">1171</span>          printDefaults || !DEFAULT_VALUES.containsKey(key)<a name="line.1171"></a>
<span class="sourceLineNo">1172</span>            || !DEFAULT_VALUES.get(key).equalsIgnoreCase(value)<a name="line.1172"></a>
<span class="sourceLineNo">1173</span>        ) {<a name="line.1173"></a>
<span class="sourceLineNo">1174</span>          s.append(", ");<a name="line.1174"></a>
<span class="sourceLineNo">1175</span>          s.append(key);<a name="line.1175"></a>
<span class="sourceLineNo">1176</span>          s.append(" =&gt; ");<a name="line.1176"></a>
<span class="sourceLineNo">1177</span>          s.append('\'').append(PrettyPrinter.format(value, getUnit(key))).append('\'');<a name="line.1177"></a>
<span class="sourceLineNo">1178</span>        }<a name="line.1178"></a>
<span class="sourceLineNo">1179</span>      }<a name="line.1179"></a>
<span class="sourceLineNo">1180</span><a name="line.1180"></a>
<span class="sourceLineNo">1181</span>      // print all non-reserved, advanced config keys as a separate subset<a name="line.1181"></a>
<span class="sourceLineNo">1182</span>      if (hasConfigKeys) {<a name="line.1182"></a>
<span class="sourceLineNo">1183</span>        s.append(", ");<a name="line.1183"></a>
<span class="sourceLineNo">1184</span>        s.append(HConstants.METADATA).append(" =&gt; ");<a name="line.1184"></a>
<span class="sourceLineNo">1185</span>        s.append('{');<a name="line.1185"></a>
<span class="sourceLineNo">1186</span>        boolean printComma = false;<a name="line.1186"></a>
<span class="sourceLineNo">1187</span>        for (Map.Entry&lt;Bytes, Bytes&gt; entry : values.entrySet()) {<a name="line.1187"></a>
<span class="sourceLineNo">1188</span>          Bytes k = entry.getKey();<a name="line.1188"></a>
<span class="sourceLineNo">1189</span>          if (RESERVED_KEYWORDS.contains(k)) {<a name="line.1189"></a>
<span class="sourceLineNo">1190</span>            continue;<a name="line.1190"></a>
<span class="sourceLineNo">1191</span>          }<a name="line.1191"></a>
<span class="sourceLineNo">1192</span>          String key = Bytes.toString(k.get());<a name="line.1192"></a>
<span class="sourceLineNo">1193</span>          String value = Bytes.toStringBinary(entry.getValue().get());<a name="line.1193"></a>
<span class="sourceLineNo">1194</span>          if (printComma) {<a name="line.1194"></a>
<span class="sourceLineNo">1195</span>            s.append(", ");<a name="line.1195"></a>
<span class="sourceLineNo">1196</span>          }<a name="line.1196"></a>
<span class="sourceLineNo">1197</span>          printComma = true;<a name="line.1197"></a>
<span class="sourceLineNo">1198</span>          s.append('\'').append(key).append('\'');<a name="line.1198"></a>
<span class="sourceLineNo">1199</span>          s.append(" =&gt; ");<a name="line.1199"></a>
<span class="sourceLineNo">1200</span>          s.append('\'').append(PrettyPrinter.format(value, getUnit(key))).append('\'');<a name="line.1200"></a>
<span class="sourceLineNo">1201</span>        }<a name="line.1201"></a>
<span class="sourceLineNo">1202</span>        s.append('}');<a name="line.1202"></a>
<span class="sourceLineNo">1203</span>      }<a name="line.1203"></a>
<span class="sourceLineNo">1204</span><a name="line.1204"></a>
<span class="sourceLineNo">1205</span>      if (!configuration.isEmpty()) {<a name="line.1205"></a>
<span class="sourceLineNo">1206</span>        s.append(", ");<a name="line.1206"></a>
<span class="sourceLineNo">1207</span>        s.append(HConstants.CONFIGURATION).append(" =&gt; ");<a name="line.1207"></a>
<span class="sourceLineNo">1208</span>        s.append('{');<a name="line.1208"></a>
<span class="sourceLineNo">1209</span>        boolean printCommaForConfiguration = false;<a name="line.1209"></a>
<span class="sourceLineNo">1210</span>        for (Map.Entry&lt;String, String&gt; e : configuration.entrySet()) {<a name="line.1210"></a>
<span class="sourceLineNo">1211</span>          if (printCommaForConfiguration) {<a name="line.1211"></a>
<span class="sourceLineNo">1212</span>            s.append(", ");<a name="line.1212"></a>
<span class="sourceLineNo">1213</span>          }<a name="line.1213"></a>
<span class="sourceLineNo">1214</span>          printCommaForConfiguration = true;<a name="line.1214"></a>
<span class="sourceLineNo">1215</span>          s.append('\'').append(e.getKey()).append('\'');<a name="line.1215"></a>
<span class="sourceLineNo">1216</span>          s.append(" =&gt; ");<a name="line.1216"></a>
<span class="sourceLineNo">1217</span>          s.append('\'').append(PrettyPrinter.format(e.getValue(), getUnit(e.getKey())))<a name="line.1217"></a>
<span class="sourceLineNo">1218</span>            .append('\'');<a name="line.1218"></a>
<span class="sourceLineNo">1219</span>        }<a name="line.1219"></a>
<span class="sourceLineNo">1220</span>        s.append("}");<a name="line.1220"></a>
<span class="sourceLineNo">1221</span>      }<a name="line.1221"></a>
<span class="sourceLineNo">1222</span>      return s;<a name="line.1222"></a>
<span class="sourceLineNo">1223</span>    }<a name="line.1223"></a>
<span class="sourceLineNo">1224</span><a name="line.1224"></a>
<span class="sourceLineNo">1225</span>    @Override<a name="line.1225"></a>
<span class="sourceLineNo">1226</span>    public boolean equals(Object obj) {<a name="line.1226"></a>
<span class="sourceLineNo">1227</span>      if (this == obj) {<a name="line.1227"></a>
<span class="sourceLineNo">1228</span>        return true;<a name="line.1228"></a>
<span class="sourceLineNo">1229</span>      }<a name="line.1229"></a>
<span class="sourceLineNo">1230</span>      if (obj instanceof ModifyableColumnFamilyDescriptor) {<a name="line.1230"></a>
<span class="sourceLineNo">1231</span>        return ColumnFamilyDescriptor.COMPARATOR.compare(this,<a name="line.1231"></a>
<span class="sourceLineNo">1232</span>          (ModifyableColumnFamilyDescriptor) obj) == 0;<a name="line.1232"></a>
<span class="sourceLineNo">1233</span>      }<a name="line.1233"></a>
<span class="sourceLineNo">1234</span>      return false;<a name="line.1234"></a>
<span class="sourceLineNo">1235</span>    }<a name="line.1235"></a>
<span class="sourceLineNo">1236</span><a name="line.1236"></a>
<span class="sourceLineNo">1237</span>    @Override<a name="line.1237"></a>
<span class="sourceLineNo">1238</span>    public int hashCode() {<a name="line.1238"></a>
<span class="sourceLineNo">1239</span>      int result = Bytes.hashCode(name);<a name="line.1239"></a>
<span class="sourceLineNo">1240</span>      result ^= (int) COLUMN_DESCRIPTOR_VERSION;<a name="line.1240"></a>
<span class="sourceLineNo">1241</span>      result ^= values.hashCode();<a name="line.1241"></a>
<span class="sourceLineNo">1242</span>      result ^= configuration.hashCode();<a name="line.1242"></a>
<span class="sourceLineNo">1243</span>      return result;<a name="line.1243"></a>
<span class="sourceLineNo">1244</span>    }<a name="line.1244"></a>
<span class="sourceLineNo">1245</span><a name="line.1245"></a>
<span class="sourceLineNo">1246</span>    @Override<a name="line.1246"></a>
<span class="sourceLineNo">1247</span>    public int compareTo(ModifyableColumnFamilyDescriptor other) {<a name="line.1247"></a>
<span class="sourceLineNo">1248</span>      return COMPARATOR.compare(this, other);<a name="line.1248"></a>
<span class="sourceLineNo">1249</span>    }<a name="line.1249"></a>
<span class="sourceLineNo">1250</span><a name="line.1250"></a>
<span class="sourceLineNo">1251</span>    /** Returns This instance serialized with pb with pb magic prefix */<a name="line.1251"></a>
<span class="sourceLineNo">1252</span>    private byte[] toByteArray() {<a name="line.1252"></a>
<span class="sourceLineNo">1253</span>      return ProtobufUtil.prependPBMagic(ProtobufUtil.toColumnFamilySchema(this).toByteArray());<a name="line.1253"></a>
<span class="sourceLineNo">1254</span>    }<a name="line.1254"></a>
<span class="sourceLineNo">1255</span><a name="line.1255"></a>
<span class="sourceLineNo">1256</span>    /**<a name="line.1256"></a>
<span class="sourceLineNo">1257</span>     * Parse the serialized representation of a {@link ModifyableColumnFamilyDescriptor}<a name="line.1257"></a>
<span class="sourceLineNo">1258</span>     * @param bytes A pb serialized {@link ModifyableColumnFamilyDescriptor} instance with pb magic<a name="line.1258"></a>
<span class="sourceLineNo">1259</span>     *              prefix<a name="line.1259"></a>
<span class="sourceLineNo">1260</span>     * @return An instance of {@link ModifyableColumnFamilyDescriptor} made from &lt;code&gt;bytes&lt;/code&gt;<a name="line.1260"></a>
<span class="sourceLineNo">1261</span>     * @see #toByteArray()<a name="line.1261"></a>
<span class="sourceLineNo">1262</span>     */<a name="line.1262"></a>
<span class="sourceLineNo">1263</span>    private static ColumnFamilyDescriptor parseFrom(final byte[] bytes)<a name="line.1263"></a>
<span class="sourceLineNo">1264</span>      throws DeserializationException {<a name="line.1264"></a>
<span class="sourceLineNo">1265</span>      if (!ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.1265"></a>
<span class="sourceLineNo">1266</span>        throw new DeserializationException("No magic");<a name="line.1266"></a>
<span class="sourceLineNo">1267</span>      }<a name="line.1267"></a>
<span class="sourceLineNo">1268</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1268"></a>
<span class="sourceLineNo">1269</span>      ColumnFamilySchema.Builder builder = ColumnFamilySchema.newBuilder();<a name="line.1269"></a>
<span class="sourceLineNo">1270</span>      ColumnFamilySchema cfs = null;<a name="line.1270"></a>
<span class="sourceLineNo">1271</span>      try {<a name="line.1271"></a>
<span class="sourceLineNo">1272</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.1272"></a>
<span class="sourceLineNo">1273</span>        cfs = builder.build();<a name="line.1273"></a>
<span class="sourceLineNo">1274</span>      } catch (IOException e) {<a name="line.1274"></a>
<span class="sourceLineNo">1275</span>        throw new DeserializationException(e);<a name="line.1275"></a>
<span class="sourceLineNo">1276</span>      }<a name="line.1276"></a>
<span class="sourceLineNo">1277</span>      return ProtobufUtil.toColumnFamilyDescriptor(cfs);<a name="line.1277"></a>
<span class="sourceLineNo">1278</span>    }<a name="line.1278"></a>
<span class="sourceLineNo">1279</span><a name="line.1279"></a>
<span class="sourceLineNo">1280</span>    @Override<a name="line.1280"></a>
<span class="sourceLineNo">1281</span>    public String getConfigurationValue(String key) {<a name="line.1281"></a>
<span class="sourceLineNo">1282</span>      return configuration.get(key);<a name="line.1282"></a>
<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
<span class="sourceLineNo">1284</span><a name="line.1284"></a>
<span class="sourceLineNo">1285</span>    @Override<a name="line.1285"></a>
<span class="sourceLineNo">1286</span>    public Map&lt;String, String&gt; getConfiguration() {<a name="line.1286"></a>
<span class="sourceLineNo">1287</span>      // shallow pointer copy<a name="line.1287"></a>
<span class="sourceLineNo">1288</span>      return Collections.unmodifiableMap(configuration);<a name="line.1288"></a>
<span class="sourceLineNo">1289</span>    }<a name="line.1289"></a>
<span class="sourceLineNo">1290</span><a name="line.1290"></a>
<span class="sourceLineNo">1291</span>    /**<a name="line.1291"></a>
<span class="sourceLineNo">1292</span>     * Setter for storing a configuration setting in {@link #configuration} map.<a name="line.1292"></a>
<span class="sourceLineNo">1293</span>     * @param key   Config key. Same as XML config key e.g. hbase.something.or.other.<a name="line.1293"></a>
<span class="sourceLineNo">1294</span>     * @param value String value. If null, removes the configuration.<a name="line.1294"></a>
<span class="sourceLineNo">1295</span>     * @return this (for chained invocation)<a name="line.1295"></a>
<span class="sourceLineNo">1296</span>     */<a name="line.1296"></a>
<span class="sourceLineNo">1297</span>    public ModifyableColumnFamilyDescriptor setConfiguration(String key, String value) {<a name="line.1297"></a>
<span class="sourceLineNo">1298</span>      if (value == null || value.length() == 0) {<a name="line.1298"></a>
<span class="sourceLineNo">1299</span>        configuration.remove(key);<a name="line.1299"></a>
<span class="sourceLineNo">1300</span>      } else {<a name="line.1300"></a>
<span class="sourceLineNo">1301</span>        configuration.put(key, value);<a name="line.1301"></a>
<span class="sourceLineNo">1302</span>      }<a name="line.1302"></a>
<span class="sourceLineNo">1303</span>      return this;<a name="line.1303"></a>
<span class="sourceLineNo">1304</span>    }<a name="line.1304"></a>
<span class="sourceLineNo">1305</span><a name="line.1305"></a>
<span class="sourceLineNo">1306</span>    /**<a name="line.1306"></a>
<span class="sourceLineNo">1307</span>     * Remove a configuration setting represented by the key from the {@link #configuration} map.<a name="line.1307"></a>
<span class="sourceLineNo">1308</span>     * @return this (for chained invocation)<a name="line.1308"></a>
<span class="sourceLineNo">1309</span>     */<a name="line.1309"></a>
<span class="sourceLineNo">1310</span>    public ModifyableColumnFamilyDescriptor removeConfiguration(final String key) {<a name="line.1310"></a>
<span class="sourceLineNo">1311</span>      return setConfiguration(key, null);<a name="line.1311"></a>
<span class="sourceLineNo">1312</span>    }<a name="line.1312"></a>
<span class="sourceLineNo">1313</span><a name="line.1313"></a>
<span class="sourceLineNo">1314</span>    @Override<a name="line.1314"></a>
<span class="sourceLineNo">1315</span>    public String getEncryptionType() {<a name="line.1315"></a>
<span class="sourceLineNo">1316</span>      return getStringOrDefault(ENCRYPTION_BYTES, Function.identity(), null);<a name="line.1316"></a>
<span class="sourceLineNo">1317</span>    }<a name="line.1317"></a>
<span class="sourceLineNo">1318</span><a name="line.1318"></a>
<span class="sourceLineNo">1319</span>    /**<a name="line.1319"></a>
<span class="sourceLineNo">1320</span>     * Set the encryption algorithm for use with this family<a name="line.1320"></a>
<span class="sourceLineNo">1321</span>     * @return this (for chained invocation)<a name="line.1321"></a>
<span class="sourceLineNo">1322</span>     */<a name="line.1322"></a>
<span class="sourceLineNo">1323</span>    public ModifyableColumnFamilyDescriptor setEncryptionType(String algorithm) {<a name="line.1323"></a>
<span class="sourceLineNo">1324</span>      return setValue(ENCRYPTION_BYTES, algorithm);<a name="line.1324"></a>
<span class="sourceLineNo">1325</span>    }<a name="line.1325"></a>
<span class="sourceLineNo">1326</span><a name="line.1326"></a>
<span class="sourceLineNo">1327</span>    @Override<a name="line.1327"></a>
<span class="sourceLineNo">1328</span>    public byte[] getEncryptionKey() {<a name="line.1328"></a>
<span class="sourceLineNo">1329</span>      return getOrDefault(ENCRYPTION_KEY_BYTES, Bytes::copy, null);<a name="line.1329"></a>
<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
<span class="sourceLineNo">1331</span><a name="line.1331"></a>
<span class="sourceLineNo">1332</span>    /**<a name="line.1332"></a>
<span class="sourceLineNo">1333</span>     * Set the raw crypto key attribute for the family<a name="line.1333"></a>
<span class="sourceLineNo">1334</span>     * @return this (for chained invocation)<a name="line.1334"></a>
<span class="sourceLineNo">1335</span>     */<a name="line.1335"></a>
<span class="sourceLineNo">1336</span>    public ModifyableColumnFamilyDescriptor setEncryptionKey(byte[] keyBytes) {<a name="line.1336"></a>
<span class="sourceLineNo">1337</span>      return setValue(ENCRYPTION_KEY_BYTES, new Bytes(keyBytes));<a name="line.1337"></a>
<span class="sourceLineNo">1338</span>    }<a name="line.1338"></a>
<span class="sourceLineNo">1339</span><a name="line.1339"></a>
<span class="sourceLineNo">1340</span>    @Override<a name="line.1340"></a>
<span class="sourceLineNo">1341</span>    public long getMobThreshold() {<a name="line.1341"></a>
<span class="sourceLineNo">1342</span>      return getStringOrDefault(MOB_THRESHOLD_BYTES, Long::valueOf, DEFAULT_MOB_THRESHOLD);<a name="line.1342"></a>
<span class="sourceLineNo">1343</span>    }<a name="line.1343"></a>
<span class="sourceLineNo">1344</span><a name="line.1344"></a>
<span class="sourceLineNo">1345</span>    /**<a name="line.1345"></a>
<span class="sourceLineNo">1346</span>     * Sets the mob threshold of the family.<a name="line.1346"></a>
<span class="sourceLineNo">1347</span>     * @param threshold The mob threshold.<a name="line.1347"></a>
<span class="sourceLineNo">1348</span>     * @return this (for chained invocation)<a name="line.1348"></a>
<span class="sourceLineNo">1349</span>     */<a name="line.1349"></a>
<span class="sourceLineNo">1350</span>    public ModifyableColumnFamilyDescriptor setMobThreshold(long threshold) {<a name="line.1350"></a>
<span class="sourceLineNo">1351</span>      return setValue(MOB_THRESHOLD_BYTES, String.valueOf(threshold));<a name="line.1351"></a>
<span class="sourceLineNo">1352</span>    }<a name="line.1352"></a>
<span class="sourceLineNo">1353</span><a name="line.1353"></a>
<span class="sourceLineNo">1354</span>    @Override<a name="line.1354"></a>
<span class="sourceLineNo">1355</span>    public boolean isMobEnabled() {<a name="line.1355"></a>
<span class="sourceLineNo">1356</span>      return getStringOrDefault(IS_MOB_BYTES, Boolean::valueOf, DEFAULT_MOB);<a name="line.1356"></a>
<span class="sourceLineNo">1357</span>    }<a name="line.1357"></a>
<span class="sourceLineNo">1358</span><a name="line.1358"></a>
<span class="sourceLineNo">1359</span>    /**<a name="line.1359"></a>
<span class="sourceLineNo">1360</span>     * Enables the mob for the family.<a name="line.1360"></a>
<span class="sourceLineNo">1361</span>     * @param isMobEnabled Whether to enable the mob for the family.<a name="line.1361"></a>
<span class="sourceLineNo">1362</span>     * @return this (for chained invocation)<a name="line.1362"></a>
<span class="sourceLineNo">1363</span>     */<a name="line.1363"></a>
<span class="sourceLineNo">1364</span>    public ModifyableColumnFamilyDescriptor setMobEnabled(boolean isMobEnabled) {<a name="line.1364"></a>
<span class="sourceLineNo">1365</span>      return setValue(IS_MOB_BYTES, String.valueOf(isMobEnabled));<a name="line.1365"></a>
<span class="sourceLineNo">1366</span>    }<a name="line.1366"></a>
<span class="sourceLineNo">1367</span><a name="line.1367"></a>
<span class="sourceLineNo">1368</span>    @Override<a name="line.1368"></a>
<span class="sourceLineNo">1369</span>    public MobCompactPartitionPolicy getMobCompactPartitionPolicy() {<a name="line.1369"></a>
<span class="sourceLineNo">1370</span>      return getStringOrDefault(MOB_COMPACT_PARTITION_POLICY_BYTES,<a name="line.1370"></a>
<span class="sourceLineNo">1371</span>        n -&gt; MobCompactPartitionPolicy.valueOf(n.toUpperCase()),<a name="line.1371"></a>
<span class="sourceLineNo">1372</span>        DEFAULT_MOB_COMPACT_PARTITION_POLICY);<a name="line.1372"></a>
<span class="sourceLineNo">1373</span>    }<a name="line.1373"></a>
<span class="sourceLineNo">1374</span><a name="line.1374"></a>
<span class="sourceLineNo">1375</span>    /**<a name="line.1375"></a>
<span class="sourceLineNo">1376</span>     * Set the mob compact partition policy for the family.<a name="line.1376"></a>
<span class="sourceLineNo">1377</span>     * @param policy policy type<a name="line.1377"></a>
<span class="sourceLineNo">1378</span>     * @return this (for chained invocation)<a name="line.1378"></a>
<span class="sourceLineNo">1379</span>     */<a name="line.1379"></a>
<span class="sourceLineNo">1380</span>    public ModifyableColumnFamilyDescriptor<a name="line.1380"></a>
<span class="sourceLineNo">1381</span>      setMobCompactPartitionPolicy(MobCompactPartitionPolicy policy) {<a name="line.1381"></a>
<span class="sourceLineNo">1382</span>      return setValue(MOB_COMPACT_PARTITION_POLICY_BYTES, policy.name());<a name="line.1382"></a>
<span class="sourceLineNo">1383</span>    }<a name="line.1383"></a>
<span class="sourceLineNo">1384</span><a name="line.1384"></a>
<span class="sourceLineNo">1385</span>    @Override<a name="line.1385"></a>
<span class="sourceLineNo">1386</span>    public short getDFSReplication() {<a name="line.1386"></a>
<span class="sourceLineNo">1387</span>      return getStringOrDefault(DFS_REPLICATION_BYTES, Short::valueOf, DEFAULT_DFS_REPLICATION);<a name="line.1387"></a>
<span class="sourceLineNo">1388</span>    }<a name="line.1388"></a>
<span class="sourceLineNo">1389</span><a name="line.1389"></a>
<span class="sourceLineNo">1390</span>    /**<a name="line.1390"></a>
<span class="sourceLineNo">1391</span>     * Set the replication factor to hfile(s) belonging to this family<a name="line.1391"></a>
<span class="sourceLineNo">1392</span>     * @param replication number of replicas the blocks(s) belonging to this CF should have, or<a name="line.1392"></a>
<span class="sourceLineNo">1393</span>     *                    {@link #DEFAULT_DFS_REPLICATION} for the default replication factor set in<a name="line.1393"></a>
<span class="sourceLineNo">1394</span>     *                    the filesystem<a name="line.1394"></a>
<span class="sourceLineNo">1395</span>     * @return this (for chained invocation)<a name="line.1395"></a>
<span class="sourceLineNo">1396</span>     */<a name="line.1396"></a>
<span class="sourceLineNo">1397</span>    public ModifyableColumnFamilyDescriptor setDFSReplication(short replication) {<a name="line.1397"></a>
<span class="sourceLineNo">1398</span>      if (replication &lt; 1 &amp;&amp; replication != DEFAULT_DFS_REPLICATION) {<a name="line.1398"></a>
<span class="sourceLineNo">1399</span>        throw new IllegalArgumentException(<a name="line.1399"></a>
<span class="sourceLineNo">1400</span>          "DFS replication factor cannot be less than 1 if explicitly set.");<a name="line.1400"></a>
<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
<span class="sourceLineNo">1402</span>      return setValue(DFS_REPLICATION_BYTES, Short.toString(replication));<a name="line.1402"></a>
<span class="sourceLineNo">1403</span>    }<a name="line.1403"></a>
<span class="sourceLineNo">1404</span><a name="line.1404"></a>
<span class="sourceLineNo">1405</span>    @Override<a name="line.1405"></a>
<span class="sourceLineNo">1406</span>    public String getStoragePolicy() {<a name="line.1406"></a>
<span class="sourceLineNo">1407</span>      return getStringOrDefault(STORAGE_POLICY_BYTES, Function.identity(), null);<a name="line.1407"></a>
<span class="sourceLineNo">1408</span>    }<a name="line.1408"></a>
<span class="sourceLineNo">1409</span><a name="line.1409"></a>
<span class="sourceLineNo">1410</span>    /**<a name="line.1410"></a>
<span class="sourceLineNo">1411</span>     * Set the storage policy for use with this family<a name="line.1411"></a>
<span class="sourceLineNo">1412</span>     * @param policy the policy to set, valid setting includes: &lt;i&gt;"LAZY_PERSIST"&lt;/i&gt;,<a name="line.1412"></a>
<span class="sourceLineNo">1413</span>     *               &lt;i&gt;"ALL_SSD"&lt;/i&gt;, &lt;i&gt;"ONE_SSD"&lt;/i&gt;, &lt;i&gt;"HOT"&lt;/i&gt;, &lt;i&gt;"WARM"&lt;/i&gt;, &lt;i&gt;"COLD"&lt;/i&gt;<a name="line.1413"></a>
<span class="sourceLineNo">1414</span>     * @return this (for chained invocation)<a name="line.1414"></a>
<span class="sourceLineNo">1415</span>     */<a name="line.1415"></a>
<span class="sourceLineNo">1416</span>    public ModifyableColumnFamilyDescriptor setStoragePolicy(String policy) {<a name="line.1416"></a>
<span class="sourceLineNo">1417</span>      return setValue(STORAGE_POLICY_BYTES, policy);<a name="line.1417"></a>
<span class="sourceLineNo">1418</span>    }<a name="line.1418"></a>
<span class="sourceLineNo">1419</span><a name="line.1419"></a>
<span class="sourceLineNo">1420</span>  }<a name="line.1420"></a>
<span class="sourceLineNo">1421</span>}<a name="line.1421"></a>




























































</pre>
</div>
</body>
</html>
