You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2019/12/16 14:43:38 UTC

[hbase-site] branch asf-site updated: Published site at eee9480cb40fe3fe1d88b333d451c1128789cb7b.

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hbase-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 2908e75  Published site at eee9480cb40fe3fe1d88b333d451c1128789cb7b.
2908e75 is described below

commit 2908e759cbc05b6b42b91412eef1341df7c6c932
Author: jenkins <bu...@apache.org>
AuthorDate: Mon Dec 16 14:43:22 2019 +0000

    Published site at eee9480cb40fe3fe1d88b333d451c1128789cb7b.
---
 acid-semantics.html                                |   2 +-
 apache_hbase_reference_guide.pdf                   |   4 +-
 .../hbase/client/TableDescriptorBuilder.html       | 868 +++++++++++----------
 book.html                                          |   2 +-
 bulk-loads.html                                    |   2 +-
 checkstyle-aggregate.html                          |  28 +-
 coc.html                                           |   2 +-
 dependencies.html                                  |   2 +-
 dependency-convergence.html                        |   2 +-
 dependency-info.html                               |   2 +-
 dependency-management.html                         |   2 +-
 devapidocs/constant-values.html                    |  24 +-
 devapidocs/index-all.html                          |  12 +
 .../apache/hadoop/hbase/backup/package-tree.html   |   2 +-
 ...escriptorBuilder.ModifyableTableDescriptor.html |  54 +-
 .../hbase/client/TableDescriptorBuilder.html       |   2 +-
 .../apache/hadoop/hbase/client/package-tree.html   |  20 +-
 .../apache/hadoop/hbase/filter/package-tree.html   |   6 +-
 .../hadoop/hbase/hbtop/field/package-tree.html     |   2 +-
 .../org/apache/hadoop/hbase/http/package-tree.html |   2 +-
 .../apache/hadoop/hbase/io/hfile/CacheConfig.html  | 220 ++++--
 .../apache/hadoop/hbase/io/hfile/package-tree.html |   6 +-
 .../org/apache/hadoop/hbase/ipc/package-tree.html  |   2 +-
 .../hadoop/hbase/mapreduce/package-tree.html       |   4 +-
 .../hbase/master/assignment/package-tree.html      |   2 +-
 .../hadoop/hbase/master/balancer/package-tree.html |   2 +-
 .../apache/hadoop/hbase/master/package-tree.html   |   4 +-
 .../hbase/master/procedure/package-tree.html       |   2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |  14 +-
 .../hadoop/hbase/procedure2/package-tree.html      |   6 +-
 .../apache/hadoop/hbase/quotas/package-tree.html   |   8 +-
 .../hadoop/hbase/regionserver/package-tree.html    |  16 +-
 .../hbase/regionserver/wal/package-tree.html       |   4 +-
 .../hadoop/hbase/security/access/package-tree.html |   4 +-
 .../apache/hadoop/hbase/security/package-tree.html |   2 +-
 .../apache/hadoop/hbase/thrift/package-tree.html   |   4 +-
 .../org/apache/hadoop/hbase/util/package-tree.html |   6 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |   2 +-
 .../src-html/org/apache/hadoop/hbase/Version.html  |   4 +-
 ...escriptorBuilder.ModifyableTableDescriptor.html | 868 +++++++++++----------
 .../hbase/client/TableDescriptorBuilder.html       | 868 +++++++++++----------
 .../apache/hadoop/hbase/io/hfile/CacheConfig.html  | 607 +++++++-------
 .../regionserver/HStore.StoreFlusherImpl.html      |   4 +-
 .../apache/hadoop/hbase/regionserver/HStore.html   |   4 +-
 downloads.html                                     |   2 +-
 export_control.html                                |   2 +-
 index.html                                         |   2 +-
 issue-tracking.html                                |   2 +-
 mail-lists.html                                    |   2 +-
 metrics.html                                       |   2 +-
 old_news.html                                      |   2 +-
 plugin-management.html                             |   2 +-
 plugins.html                                       |   2 +-
 poweredbyhbase.html                                |   2 +-
 project-info.html                                  |   2 +-
 project-reports.html                               |   2 +-
 project-summary.html                               |   2 +-
 pseudo-distributed.html                            |   2 +-
 replication.html                                   |   2 +-
 resources.html                                     |   2 +-
 source-repository.html                             |   2 +-
 sponsors.html                                      |   2 +-
 supportingprojects.html                            |   2 +-
 team-list.html                                     |   2 +-
 testdevapidocs/index-all.html                      |  10 +-
 .../apache/hadoop/hbase/backup/package-tree.html   |   2 +-
 .../hadoop/hbase/chaos/actions/package-tree.html   |   2 +-
 .../hbase/client/TestTableDescriptorBuilder.html   |  17 +-
 .../hadoop/hbase/io/hfile/TestCacheOnWrite.html    |  28 +-
 .../org/apache/hadoop/hbase/package-tree.html      |  10 +-
 .../hadoop/hbase/procedure/package-tree.html       |   8 +-
 .../hadoop/hbase/procedure2/package-tree.html      |   2 +-
 .../hadoop/hbase/regionserver/package-tree.html    |   6 +-
 .../hbase/client/TestTableDescriptorBuilder.html   |  19 +-
 .../hfile/TestCacheOnWrite.CacheOnWriteType.html   | 159 ++--
 .../hadoop/hbase/io/hfile/TestCacheOnWrite.html    | 159 ++--
 76 files changed, 2187 insertions(+), 1978 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index c48e360..4f4b8dd 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -443,7 +443,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index f61682e..7a68bc8 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20191214144030+00'00')
-/CreationDate (D:20191214144030+00'00')
+/ModDate (D:20191216144022+00'00')
+/CreationDate (D:20191216144022+00'00')
 >>
 endobj
 2 0 obj
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html b/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
index d8a909f..2f17833 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
@@ -1191,439 +1191,441 @@
 <span class="sourceLineNo">1183</span>          }<a name="line.1183"></a>
 <span class="sourceLineNo">1184</span>          s.append("}");<a name="line.1184"></a>
 <span class="sourceLineNo">1185</span>        }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>      }<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span><a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>      s.append("}"); // end METHOD<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      return s;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    }<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span><a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    /**<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>     * Compare the contents of the descriptor with another one passed as a<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>     * parameter. Checks if the obj passed is an instance of ModifyableTableDescriptor,<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>     * if yes then the contents of the descriptors are compared.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>     *<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>     * @param obj The object to compare<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>     * @return true if the contents of the the two descriptors exactly match<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>     *<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>     * @see java.lang.Object#equals(java.lang.Object)<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>     */<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    @Override<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>    public boolean equals(Object obj) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      if (this == obj) {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>        return true;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      if (obj instanceof ModifyableTableDescriptor) {<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>        return TableDescriptor.COMPARATOR.compare(this, (ModifyableTableDescriptor) obj) == 0;<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      }<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      return false;<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>     * @return hash code<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>     */<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    @Override<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>    public int hashCode() {<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      int result = this.name.hashCode();<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      if (this.families.size() &gt; 0) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>        for (ColumnFamilyDescriptor e : this.families.values()) {<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>          result ^= e.hashCode();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>        }<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      result ^= values.hashCode();<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      return result;<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    }<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span><a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>    // Comparable<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    /**<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>     * Compares the descriptor with another descriptor which is passed as a<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>     * parameter. This compares the content of the two descriptors and not the<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>     * reference.<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>     *<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>     * @param other The MTD to compare<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>     * @return 0 if the contents of the descriptors are exactly matching, 1 if<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>     * there is a mismatch in the contents<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>     */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    @Override<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    public int compareTo(final ModifyableTableDescriptor other) {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      return TableDescriptor.COMPARATOR.compare(this, other);<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>    }<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span><a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    @Override<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    public ColumnFamilyDescriptor[] getColumnFamilies() {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      return families.values().toArray(new ColumnFamilyDescriptor[families.size()]);<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span><a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    /**<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>     * Returns the configured replicas per region<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>     */<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    @Override<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    public int getRegionReplication() {<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      return getOrDefault(REGION_REPLICATION_KEY, Integer::valueOf, DEFAULT_REGION_REPLICATION);<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>     * Sets the number of replicas per region.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>     *<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>     * @param regionReplication the replication factor per region<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>     * @return the modifyable TD<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>     */<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>    public ModifyableTableDescriptor setRegionReplication(int regionReplication) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      return setValue(REGION_REPLICATION_KEY, Integer.toString(regionReplication));<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span><a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    /**<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>     * @return true if the read-replicas memstore replication is enabled.<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>     */<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    @Override<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    public boolean hasRegionMemStoreReplication() {<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>      return getOrDefault(REGION_MEMSTORE_REPLICATION_KEY, Boolean::valueOf, DEFAULT_REGION_MEMSTORE_REPLICATION);<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>    }<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span><a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>    /**<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>     * Enable or Disable the memstore replication from the primary region to the<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>     * replicas. The replication will be used only for meta operations (e.g.<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>     * flush, compaction, ...)<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>     *<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>     * @param memstoreReplication true if the new data written to the primary<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>     * region should be replicated. false if the secondaries can tollerate to<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>     * have new data only when the primary flushes the memstore.<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>     * @return the modifyable TD<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>     */<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    public ModifyableTableDescriptor setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>      setValue(REGION_MEMSTORE_REPLICATION_KEY, Boolean.toString(memstoreReplication));<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      // If the memstore replication is setup, we do not have to wait for observing a flush event<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>      // from primary before starting to serve reads, because gaps from replication is not applicable<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>      return setValue(REGION_REPLICA_WAIT_FOR_PRIMARY_FLUSH_CONF_KEY,<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>              Boolean.toString(memstoreReplication));<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>    public ModifyableTableDescriptor setPriority(int priority) {<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>      return setValue(PRIORITY_KEY, Integer.toString(priority));<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>    }<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span><a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    @Override<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    public int getPriority() {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      return getOrDefault(PRIORITY_KEY, Integer::valueOf, DEFAULT_PRIORITY);<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    }<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span><a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>    /**<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>     * Returns all the column family names of the current table. The map of<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>     * TableDescriptor contains mapping of family name to ColumnFamilyDescriptor.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>     * This returns all the keys of the family map which represents the column<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>     * family names of the table.<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>     *<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>     * @return Immutable sorted set of the keys of the families.<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>     */<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    @Override<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    public Set&lt;byte[]&gt; getColumnFamilyNames() {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return Collections.unmodifiableSet(this.families.keySet());<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>    /**<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>     * Returns the ColumnFamilyDescriptor for a specific column family with name as<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>     * specified by the parameter column.<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>     *<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>     * @param column Column family name<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>     * passed in column.<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>     */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    @Override<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    public ColumnFamilyDescriptor getColumnFamily(final byte[] column) {<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      return this.families.get(column);<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>    /**<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>     * Removes the ColumnFamilyDescriptor with name specified by the parameter column<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>     * from the table descriptor<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>     *<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>     * @param column Name of the column family to be removed.<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>     * passed in column.<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>     */<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    public ColumnFamilyDescriptor removeColumnFamily(final byte[] column) {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>      return this.families.remove(column);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    }<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>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>     * loadable or not will be determined when a region is opened.<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>     *<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>     * @param className Full class name.<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>     * @throws IOException<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>     * @return the modifyable TD<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>     */<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    public ModifyableTableDescriptor setCoprocessor(String className) throws IOException {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      return setCoprocessor(<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>        CoprocessorDescriptorBuilder.newBuilder(className).setPriority(Coprocessor.PRIORITY_USER)<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>          .build());<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    }<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span><a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>    /**<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>     * loadable or not will be determined when a region is opened.<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>     *<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>     * @throws IOException any illegal parameter key/value<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>     * @return the modifyable TD<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>     */<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    public ModifyableTableDescriptor setCoprocessor(CoprocessorDescriptor cp)<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>            throws IOException {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      checkHasCoprocessor(cp.getClassName());<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      if (cp.getPriority() &lt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>        throw new IOException("Priority must be bigger than or equal with zero, current:"<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          + cp.getPriority());<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      }<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      // Validate parameter kvs and then add key/values to kvString.<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>      StringBuilder kvString = new StringBuilder();<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      for (Map.Entry&lt;String, String&gt; e : cp.getProperties().entrySet()) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        if (!e.getKey().matches(CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN)) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          throw new IOException("Illegal parameter key = " + e.getKey());<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>        }<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>        if (!e.getValue().matches(CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN)) {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>          throw new IOException("Illegal parameter (" + e.getKey()<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>                  + ") value = " + e.getValue());<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>        if (kvString.length() != 0) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>          kvString.append(',');<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>        }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        kvString.append(e.getKey());<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        kvString.append('=');<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        kvString.append(e.getValue());<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      String value = cp.getJarPath().orElse("")<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>              + "|" + cp.getClassName() + "|" + Integer.toString(cp.getPriority()) + "|"<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>              + kvString.toString();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      return setCoprocessorToMap(value);<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    /**<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>     * loadable or not will be determined when a region is opened.<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>     *<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>     * @throws IOException<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>     * @return the modifyable TD<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>     * @deprecated used by HTableDescriptor and admin.rb.<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>     *                       As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>     */<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    @Deprecated<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    public ModifyableTableDescriptor setCoprocessorWithSpec(final String specStr)<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      throws IOException {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>      CoprocessorDescriptor cpDesc = toCoprocessorDescriptor(specStr).orElseThrow(<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        () -&gt; new IllegalArgumentException(<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          "Format does not match " + CP_HTD_ATTR_VALUE_PATTERN + ": " + specStr));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>      checkHasCoprocessor(cpDesc.getClassName());<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      return setCoprocessorToMap(specStr);<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    }<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span><a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>    private void checkHasCoprocessor(final String className) throws IOException {<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      if (hasCoprocessor(className)) {<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>        throw new IOException("Coprocessor " + className + " already exists.");<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>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    /**<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * Add coprocessor to values Map<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>     * @return Returns &lt;code&gt;this&lt;/code&gt;<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>     */<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    private ModifyableTableDescriptor setCoprocessorToMap(final String specStr) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      if (specStr == null) {<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        return this;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      // generate a coprocessor key<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      int maxCoprocessorNumber = 0;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      Matcher keyMatcher;<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values.entrySet()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e.getKey().get()));<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>        if (!keyMatcher.matches()) {<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>          continue;<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        }<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>        maxCoprocessorNumber = Math.max(Integer.parseInt(keyMatcher.group(1)), maxCoprocessorNumber);<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      }<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      maxCoprocessorNumber++;<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      String key = "coprocessor$" + Integer.toString(maxCoprocessorNumber);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      return setValue(new Bytes(Bytes.toBytes(key)), new Bytes(Bytes.toBytes(specStr)));<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span><a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>    /**<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>     * Check if the table has an attached co-processor represented by the name<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>     * className<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>     *<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>     * @param classNameToMatch - Class name of the co-processor<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>     * @return true of the table has a co-processor className<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>     */<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>    @Override<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    public boolean hasCoprocessor(String classNameToMatch) {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>      return getCoprocessorDescriptors().stream().anyMatch(cp -&gt; cp.getClassName()<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        .equals(classNameToMatch));<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span><a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    /**<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>     * Return the list of attached co-processor represented by their name<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>     * className<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     *<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @return The list of co-processors classNames<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     */<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    @Override<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    public List&lt;CoprocessorDescriptor&gt; getCoprocessorDescriptors() {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      List&lt;CoprocessorDescriptor&gt; result = new ArrayList&lt;&gt;();<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e: getValues().entrySet()) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>        String key = Bytes.toString(e.getKey().get()).trim();<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        if (CP_HTD_ATTR_KEY_PATTERN.matcher(key).matches()) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>          toCoprocessorDescriptor(Bytes.toString(e.getValue().get()).trim())<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>            .ifPresent(result::add);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      }<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      return result;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>    }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span><a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    /**<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>     * Remove a coprocessor from those set on the table<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>     *<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>     * @param className Class name of the co-processor<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>     */<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    public void removeCoprocessor(String className) {<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      Bytes match = null;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>      Matcher keyMatcher;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      Matcher valueMatcher;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>              .entrySet()) {<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>                .getKey().get()));<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>        if (!keyMatcher.matches()) {<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          continue;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>        }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        valueMatcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(Bytes<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>                .toString(e.getValue().get()));<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>        if (!valueMatcher.matches()) {<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>          continue;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>        }<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>        // get className and compare<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        String clazz = valueMatcher.group(2).trim(); // classname is the 2nd field<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        // remove the CP if it is present<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        if (clazz.equals(className.trim())) {<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>          match = e.getKey();<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>          break;<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      // if we found a match, remove it<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      if (match != null) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        ModifyableTableDescriptor.this.removeValue(match);<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>      }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    }<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    /**<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>     */<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    @Deprecated<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    public ModifyableTableDescriptor setOwner(User owner) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      return setOwnerString(owner != null ? owner.getShortName() : null);<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span><a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    /**<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    // used by admin.rb:alter(table_name,*args) to update owner.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>    @Deprecated<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    public ModifyableTableDescriptor setOwnerString(String ownerString) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return setValue(OWNER_KEY, ownerString);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    /**<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     */<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    @Override<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    @Deprecated<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    public String getOwnerString() {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      // Note that every table should have an owner (i.e. should have OWNER_KEY set).<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      // hbase:meta should return system user as owner, not null (see<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      // MasterFileSystem.java:bootstrap()).<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      return getOrDefault(OWNER_KEY, Function.identity(), null);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>    }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span><a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    /**<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>     * @return the bytes in pb format<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>     */<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>    private byte[] toByteArray() {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      return ProtobufUtil.prependPBMagic(ProtobufUtil.toTableSchema(this).toByteArray());<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>    }<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span><a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>    /**<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>     * @param bytes A pb serialized {@link ModifyableTableDescriptor} instance<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>     * with pb magic prefix<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>     * @return An instance of {@link ModifyableTableDescriptor} made from<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>     * &lt;code&gt;bytes&lt;/code&gt;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>     * @throws DeserializationException<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>     * @see #toByteArray()<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>     */<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    private static TableDescriptor parseFrom(final byte[] bytes)<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>            throws DeserializationException {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        throw new DeserializationException("Expected PB encoded ModifyableTableDescriptor");<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      HBaseProtos.TableSchema.Builder builder = HBaseProtos.TableSchema.newBuilder();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      try {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>        return ProtobufUtil.toTableDescriptor(builder.build());<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      } catch (IOException e) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        throw new DeserializationException(e);<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>      }<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>    }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>    @Override<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>    public int getColumnFamilyCount() {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      return families.size();<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>    }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>  }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span><a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>  private static Optional&lt;CoprocessorDescriptor&gt; toCoprocessorDescriptor(String spec) {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    Matcher matcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(spec);<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    if (matcher.matches()) {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // jar file path can be empty if the cp class can be loaded<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // from class loader.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      String path = matcher.group(1).trim().isEmpty() ?<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>        null : matcher.group(1).trim();<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      String className = matcher.group(2).trim();<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (className.isEmpty()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return Optional.empty();<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      String priorityStr = matcher.group(3).trim();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      int priority = priorityStr.isEmpty() ?<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>        Coprocessor.PRIORITY_USER : Integer.parseInt(priorityStr);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      String cfgSpec = null;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      try {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        cfgSpec = matcher.group(4);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      } catch (IndexOutOfBoundsException ex) {<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>        // ignore<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>      Map&lt;String, String&gt; ourConf = new TreeMap&lt;&gt;();<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      if (cfgSpec != null &amp;&amp; !cfgSpec.trim().equals("|")) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>        cfgSpec = cfgSpec.substring(cfgSpec.indexOf('|') + 1);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>        Matcher m = CP_HTD_ATTR_VALUE_PARAM_PATTERN.matcher(cfgSpec);<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        while (m.find()) {<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>          ourConf.put(m.group(1), m.group(2));<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      return Optional.of(CoprocessorDescriptorBuilder.newBuilder(className)<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        .setJarPath(path)<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        .setPriority(priority)<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        .setProperties(ourConf)<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>        .build());<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    }<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    return Optional.empty();<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>}<a name="line.1618"></a>
+<span class="sourceLineNo">1186</span><a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>        s.append("}");<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>      }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      s.append("}"); // end METHOD<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>      return s;<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    /**<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>     * Compare the contents of the descriptor with another one passed as a<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>     * parameter. Checks if the obj passed is an instance of ModifyableTableDescriptor,<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>     * if yes then the contents of the descriptors are compared.<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>     *<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>     * @param obj The object to compare<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>     * @return true if the contents of the the two descriptors exactly match<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>     *<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>     * @see java.lang.Object#equals(java.lang.Object)<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>     */<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>    @Override<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    public boolean equals(Object obj) {<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      if (this == obj) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>        return true;<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>      if (obj instanceof ModifyableTableDescriptor) {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>        return TableDescriptor.COMPARATOR.compare(this, (ModifyableTableDescriptor) obj) == 0;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      return false;<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    }<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span><a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    /**<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>     * @return hash code<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>     */<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    @Override<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>    public int hashCode() {<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>      int result = this.name.hashCode();<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      if (this.families.size() &gt; 0) {<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>        for (ColumnFamilyDescriptor e : this.families.values()) {<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>          result ^= e.hashCode();<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>        }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      }<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      result ^= values.hashCode();<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      return result;<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>    }<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span><a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>    // Comparable<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    /**<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>     * Compares the descriptor with another descriptor which is passed as a<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>     * parameter. This compares the content of the two descriptors and not the<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>     * reference.<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>     *<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>     * @param other The MTD to compare<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>     * @return 0 if the contents of the descriptors are exactly matching, 1 if<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>     * there is a mismatch in the contents<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>     */<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    @Override<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>    public int compareTo(final ModifyableTableDescriptor other) {<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      return TableDescriptor.COMPARATOR.compare(this, other);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    }<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span><a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    @Override<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>    public ColumnFamilyDescriptor[] getColumnFamilies() {<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      return families.values().toArray(new ColumnFamilyDescriptor[families.size()]);<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>    }<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 the configured replicas per region<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>     */<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    @Override<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    public int getRegionReplication() {<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      return getOrDefault(REGION_REPLICATION_KEY, Integer::valueOf, DEFAULT_REGION_REPLICATION);<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>    }<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span><a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    /**<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>     * Sets the number of replicas per region.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>     *<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>     * @param regionReplication the replication factor per region<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>     * @return the modifyable TD<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>     */<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>    public ModifyableTableDescriptor setRegionReplication(int regionReplication) {<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>      return setValue(REGION_REPLICATION_KEY, Integer.toString(regionReplication));<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    }<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span><a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    /**<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>     * @return true if the read-replicas memstore replication is enabled.<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>     */<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    @Override<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    public boolean hasRegionMemStoreReplication() {<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      return getOrDefault(REGION_MEMSTORE_REPLICATION_KEY, Boolean::valueOf, DEFAULT_REGION_MEMSTORE_REPLICATION);<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>    }<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span><a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    /**<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>     * Enable or Disable the memstore replication from the primary region to the<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>     * replicas. The replication will be used only for meta operations (e.g.<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>     * flush, compaction, ...)<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>     *<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>     * @param memstoreReplication true if the new data written to the primary<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>     * region should be replicated. false if the secondaries can tollerate to<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>     * have new data only when the primary flushes the memstore.<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>     * @return the modifyable TD<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>     */<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>    public ModifyableTableDescriptor setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>      setValue(REGION_MEMSTORE_REPLICATION_KEY, Boolean.toString(memstoreReplication));<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>      // If the memstore replication is setup, we do not have to wait for observing a flush event<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>      // from primary before starting to serve reads, because gaps from replication is not applicable<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>      return setValue(REGION_REPLICA_WAIT_FOR_PRIMARY_FLUSH_CONF_KEY,<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>              Boolean.toString(memstoreReplication));<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    }<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span><a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>    public ModifyableTableDescriptor setPriority(int priority) {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      return setValue(PRIORITY_KEY, Integer.toString(priority));<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>    }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span><a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>    @Override<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>    public int getPriority() {<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>      return getOrDefault(PRIORITY_KEY, Integer::valueOf, DEFAULT_PRIORITY);<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>    }<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span><a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    /**<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>     * Returns all the column family names of the current table. The map of<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>     * TableDescriptor contains mapping of family name to ColumnFamilyDescriptor.<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>     * This returns all the keys of the family map which represents the column<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>     * family names of the table.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>     *<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>     * @return Immutable sorted set of the keys of the families.<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>     */<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    @Override<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    public Set&lt;byte[]&gt; getColumnFamilyNames() {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>      return Collections.unmodifiableSet(this.families.keySet());<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    }<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span><a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    /**<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>     * Returns the ColumnFamilyDescriptor for a specific column family with name as<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>     * specified by the parameter column.<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>     *<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>     * @param column Column family name<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>     * passed in column.<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>     */<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    @Override<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>    public ColumnFamilyDescriptor getColumnFamily(final byte[] column) {<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>      return this.families.get(column);<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>    }<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span><a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    /**<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>     * Removes the ColumnFamilyDescriptor with name specified by the parameter column<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>     * from the table descriptor<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>     *<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>     * @param column Name of the column family to be removed.<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>     * passed in column.<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>     */<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    public ColumnFamilyDescriptor removeColumnFamily(final byte[] column) {<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>      return this.families.remove(column);<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span><a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>    /**<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>     * loadable or not will be determined when a region is opened.<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>     *<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>     * @param className Full class name.<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>     * @throws IOException<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>     * @return the modifyable TD<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>     */<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>    public ModifyableTableDescriptor setCoprocessor(String className) throws IOException {<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>      return setCoprocessor(<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>        CoprocessorDescriptorBuilder.newBuilder(className).setPriority(Coprocessor.PRIORITY_USER)<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>          .build());<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    }<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span><a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    /**<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>     * loadable or not will be determined when a region is opened.<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>     *<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>     * @throws IOException any illegal parameter key/value<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>     * @return the modifyable TD<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>     */<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>    public ModifyableTableDescriptor setCoprocessor(CoprocessorDescriptor cp)<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>            throws IOException {<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>      checkHasCoprocessor(cp.getClassName());<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      if (cp.getPriority() &lt; 0) {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>        throw new IOException("Priority must be bigger than or equal with zero, current:"<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>          + cp.getPriority());<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>      }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>      // Validate parameter kvs and then add key/values to kvString.<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      StringBuilder kvString = new StringBuilder();<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>      for (Map.Entry&lt;String, String&gt; e : cp.getProperties().entrySet()) {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        if (!e.getKey().matches(CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN)) {<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>          throw new IOException("Illegal parameter key = " + e.getKey());<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>        if (!e.getValue().matches(CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN)) {<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          throw new IOException("Illegal parameter (" + e.getKey()<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>                  + ") value = " + e.getValue());<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>        }<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>        if (kvString.length() != 0) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          kvString.append(',');<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>        kvString.append(e.getKey());<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>        kvString.append('=');<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>        kvString.append(e.getValue());<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>      String value = cp.getJarPath().orElse("")<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>              + "|" + cp.getClassName() + "|" + Integer.toString(cp.getPriority()) + "|"<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>              + kvString.toString();<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      return setCoprocessorToMap(value);<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span><a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    /**<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>     * loadable or not will be determined when a region is opened.<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>     *<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>     * @throws IOException<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>     * @return the modifyable TD<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>     * @deprecated used by HTableDescriptor and admin.rb.<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>     *                       As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>     */<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>    @Deprecated<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    public ModifyableTableDescriptor setCoprocessorWithSpec(final String specStr)<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>      throws IOException {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      CoprocessorDescriptor cpDesc = toCoprocessorDescriptor(specStr).orElseThrow(<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        () -&gt; new IllegalArgumentException(<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>          "Format does not match " + CP_HTD_ATTR_VALUE_PATTERN + ": " + specStr));<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      checkHasCoprocessor(cpDesc.getClassName());<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return setCoprocessorToMap(specStr);<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    }<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span><a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>    private void checkHasCoprocessor(final String className) throws IOException {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      if (hasCoprocessor(className)) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        throw new IOException("Coprocessor " + className + " already exists.");<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      }<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    /**<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>     * Add coprocessor to values Map<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>     * @return Returns &lt;code&gt;this&lt;/code&gt;<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     */<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>    private ModifyableTableDescriptor setCoprocessorToMap(final String specStr) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      if (specStr == null) {<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>        return this;<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>      }<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      // generate a coprocessor key<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      int maxCoprocessorNumber = 0;<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>      Matcher keyMatcher;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values.entrySet()) {<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e.getKey().get()));<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>        if (!keyMatcher.matches()) {<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>          continue;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        }<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        maxCoprocessorNumber = Math.max(Integer.parseInt(keyMatcher.group(1)), maxCoprocessorNumber);<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      maxCoprocessorNumber++;<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      String key = "coprocessor$" + Integer.toString(maxCoprocessorNumber);<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      return setValue(new Bytes(Bytes.toBytes(key)), new Bytes(Bytes.toBytes(specStr)));<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>    }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span><a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>    /**<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>     * Check if the table has an attached co-processor represented by the name<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>     * className<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>     *<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>     * @param classNameToMatch - Class name of the co-processor<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>     * @return true of the table has a co-processor className<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>     */<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>    @Override<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>    public boolean hasCoprocessor(String classNameToMatch) {<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      return getCoprocessorDescriptors().stream().anyMatch(cp -&gt; cp.getClassName()<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        .equals(classNameToMatch));<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span><a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>     * Return the list of attached co-processor represented by their name<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>     * className<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>     *<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>     * @return The list of co-processors classNames<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>     */<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>    @Override<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    public List&lt;CoprocessorDescriptor&gt; getCoprocessorDescriptors() {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      List&lt;CoprocessorDescriptor&gt; result = new ArrayList&lt;&gt;();<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e: getValues().entrySet()) {<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        String key = Bytes.toString(e.getKey().get()).trim();<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>        if (CP_HTD_ATTR_KEY_PATTERN.matcher(key).matches()) {<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>          toCoprocessorDescriptor(Bytes.toString(e.getValue().get()).trim())<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>            .ifPresent(result::add);<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        }<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      return result;<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span><a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    /**<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>     * Remove a coprocessor from those set on the table<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>     *<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>     * @param className Class name of the co-processor<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>     */<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>    public void removeCoprocessor(String className) {<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      Bytes match = null;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      Matcher keyMatcher;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      Matcher valueMatcher;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              .entrySet()) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>                .getKey().get()));<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>        if (!keyMatcher.matches()) {<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          continue;<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        }<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>        valueMatcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(Bytes<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>                .toString(e.getValue().get()));<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>        if (!valueMatcher.matches()) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          continue;<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>        // get className and compare<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>        String clazz = valueMatcher.group(2).trim(); // classname is the 2nd field<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>        // remove the CP if it is present<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>        if (clazz.equals(className.trim())) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>          match = e.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          break;<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      }<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      // if we found a match, remove it<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      if (match != null) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ModifyableTableDescriptor.this.removeValue(match);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>      }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    }<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span><a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    /**<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>     */<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>    @Deprecated<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    public ModifyableTableDescriptor setOwner(User owner) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>      return setOwnerString(owner != null ? owner.getShortName() : null);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span><a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    /**<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     */<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    // used by admin.rb:alter(table_name,*args) to update owner.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>    @Deprecated<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    public ModifyableTableDescriptor setOwnerString(String ownerString) {<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      return setValue(OWNER_KEY, ownerString);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span><a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    /**<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>     */<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    @Override<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    @Deprecated<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    public String getOwnerString() {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      // Note that every table should have an owner (i.e. should have OWNER_KEY set).<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>      // hbase:meta should return system user as owner, not null (see<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>      // MasterFileSystem.java:bootstrap()).<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>      return getOrDefault(OWNER_KEY, Function.identity(), null);<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    }<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span><a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>    /**<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>     * @return the bytes in pb format<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>     */<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    private byte[] toByteArray() {<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>      return ProtobufUtil.prependPBMagic(ProtobufUtil.toTableSchema(this).toByteArray());<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>    /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>     * @param bytes A pb serialized {@link ModifyableTableDescriptor} instance<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>     * with pb magic prefix<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>     * @return An instance of {@link ModifyableTableDescriptor} made from<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>     * &lt;code&gt;bytes&lt;/code&gt;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>     * @throws DeserializationException<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>     * @see #toByteArray()<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>     */<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    private static TableDescriptor parseFrom(final byte[] bytes)<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>            throws DeserializationException {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>      if (!ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        throw new DeserializationException("Expected PB encoded ModifyableTableDescriptor");<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      }<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      HBaseProtos.TableSchema.Builder builder = HBaseProtos.TableSchema.newBuilder();<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      try {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        return ProtobufUtil.toTableDescriptor(builder.build());<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      } catch (IOException e) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        throw new DeserializationException(e);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      }<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>    }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span><a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public int getColumnFamilyCount() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      return families.size();<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  }<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span><a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>  private static Optional&lt;CoprocessorDescriptor&gt; toCoprocessorDescriptor(String spec) {<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>    Matcher matcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(spec);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    if (matcher.matches()) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      // jar file path can be empty if the cp class can be loaded<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>      // from class loader.<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      String path = matcher.group(1).trim().isEmpty() ?<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        null : matcher.group(1).trim();<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      String className = matcher.group(2).trim();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      if (className.isEmpty()) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>        return Optional.empty();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      String priorityStr = matcher.group(3).trim();<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      int priority = priorityStr.isEmpty() ?<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        Coprocessor.PRIORITY_USER : Integer.parseInt(priorityStr);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>      String cfgSpec = null;<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>      try {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>        cfgSpec = matcher.group(4);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>      } catch (IndexOutOfBoundsException ex) {<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>        // ignore<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      }<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      Map&lt;String, String&gt; ourConf = new TreeMap&lt;&gt;();<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      if (cfgSpec != null &amp;&amp; !cfgSpec.trim().equals("|")) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>        cfgSpec = cfgSpec.substring(cfgSpec.indexOf('|') + 1);<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>        Matcher m = CP_HTD_ATTR_VALUE_PARAM_PATTERN.matcher(cfgSpec);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        while (m.find()) {<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>          ourConf.put(m.group(1), m.group(2));<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>        }<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      return Optional.of(CoprocessorDescriptorBuilder.newBuilder(className)<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>        .setJarPath(path)<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        .setPriority(priority)<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>        .setProperties(ourConf)<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        .build());<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>    return Optional.empty();<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  }<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>}<a name="line.1620"></a>
 
 
 
diff --git a/book.html b/book.html
index c81fd89..e74e95c 100644
--- a/book.html
+++ b/book.html
@@ -43872,7 +43872,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2019-12-14 14:30:08 UTC
+Last updated 2019-12-16 14:30:02 UTC
 </div>
 </div>
 </body>
diff --git a/bulk-loads.html b/bulk-loads.html
index cf3ed51..a06d2a6 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -148,7 +148,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index c48e08b..c5f2b1b 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -19758,73 +19758,73 @@
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1236</td></tr>
+<td>1238</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
-<td>1271</td></tr>
+<td>1273</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1280</td></tr>
+<td>1282</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1281</td></tr>
+<td>1283</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>1287</td></tr>
+<td>1289</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1320</td></tr>
+<td>1322</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1333</td></tr>
+<td>1335</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1346</td></tr>
+<td>1348</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1402</td></tr>
+<td>1404</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>1440</td></tr>
+<td>1442</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>1555</td></tr>
+<td>1557</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>1558</td></tr></table></div>
+<td>1560</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.client.TableState.java">org/apache/hadoop/hbase/client/TableState.java</h3>
 <table border="0" class="table table-striped">
@@ -34158,7 +34158,7 @@
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>185</td></tr></table></div>
+<td>199</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.io.hfile.CacheStats.java">org/apache/hadoop/hbase/io/hfile/CacheStats.java</h3>
 <table border="0" class="table table-striped">
@@ -91068,7 +91068,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/coc.html b/coc.html
index ccd169c..93e7fd0 100644
--- a/coc.html
+++ b/coc.html
@@ -217,7 +217,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependencies.html b/dependencies.html
index bda610f..4e7f788 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -289,7 +289,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 405a7f8..ea1b0be 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -534,7 +534,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-info.html b/dependency-info.html
index 9f444aa..b2891ff 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -170,7 +170,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-management.html b/dependency-management.html
index 459606b..8ddab61 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -898,7 +898,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 51b5067..64a9596 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -4095,14 +4095,14 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Sat Dec 14 14:36:41 UTC 2019"</code></td>
+<td class="colLast"><code>"Mon Dec 16 14:36:23 UTC 2019"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"de87d72bb4da44549d76bc98b31d75165bb08aaa"</code></td>
+<td class="colLast"><code>"eee9480cb40fe3fe1d88b333d451c1128789cb7b"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
@@ -9966,33 +9966,47 @@
 <td class="colLast"><code>"hfile.block.bloom.cacheonwrite"</code></td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.io.hfile.CacheConfig.CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td><code><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY">CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY</a></code></td>
+<td class="colLast"><code>"hbase.rs.cachecompactedblocksonwrite"</code></td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.io.hfile.CacheConfig.CACHE_DATA_BLOCKS_COMPRESSED_KEY">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#CACHE_DATA_BLOCKS_COMPRESSED_KEY">CACHE_DATA_BLOCKS_COMPRESSED_KEY</a></code></td>
 <td class="colLast"><code>"hbase.block.data.cachecompressed"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.io.hfile.CacheConfig.CACHE_DATA_ON_READ_KEY">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#CACHE_DATA_ON_READ_KEY">CACHE_DATA_ON_READ_KEY</a></code></td>
 <td class="colLast"><code>"hbase.block.data.cacheonread"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.io.hfile.CacheConfig.CACHE_INDEX_BLOCKS_ON_WRITE_KEY">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#CACHE_INDEX_BLOCKS_ON_WRITE_KEY">CACHE_INDEX_BLOCKS_ON_WRITE_KEY</a></code></td>
 <td class="colLast"><code>"hfile.block.index.cacheonwrite"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_BLOOMS_ON_WRITE">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;boolean</code></td>
 <td><code><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_BLOOMS_ON_WRITE">DEFAULT_CACHE_BLOOMS_ON_WRITE</a></code></td>
 <td class="colLast"><code>false</code></td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;boolean</code></td>
+<td><code><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE">DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE</a></code></td>
+<td class="colLast"><code>false</code></td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_DATA_COMPRESSED">
 <!--   -->
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 063dd6c..66c6785 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -8410,6 +8410,10 @@
 &nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.html#CACHE_BLOOMS_ON_WRITE_BYTES">CACHE_BLOOMS_ON_WRITE_BYTES</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">ColumnFamilyDescriptorBuilder</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY">CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
+<dd>
+<div class="block">Configuration key to cache blocks when a compacted file is written</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#CACHE_DATA_BLOCKS_COMPRESSED_KEY">CACHE_DATA_BLOCKS_COMPRESSED_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
 <dd>
 <div class="block">Configuration key to cache data blocks in compressed and/or encrypted format.</div>
@@ -8521,6 +8525,10 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#cacheCapacity">cacheCapacity</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#cacheCompactedDataOnWrite">cacheCompactedDataOnWrite</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
+<dd>
+<div class="block">Whether data blocks should be cached when compacted file is written</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFile.WriterFactory.html#cacheConf">cacheConf</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFile.WriterFactory.html" title="class in org.apache.hadoop.hbase.io.hfile">HFile.WriterFactory</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFileBlockIndex.BlockIndexWriter.html#cacheConf">cacheConf</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFileBlockIndex.BlockIndexWriter.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlockIndex.BlockIndexWriter</a></dt>
@@ -23256,6 +23264,8 @@
 &nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_BLOOMS_ON_WRITE">DEFAULT_CACHE_BLOOMS_ON_WRITE</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE">DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_DATA_COMPRESSED">DEFAULT_CACHE_DATA_COMPRESSED</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HColumnDescriptor.html#DEFAULT_CACHE_DATA_IN_L1">DEFAULT_CACHE_DATA_IN_L1</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a></dt>
@@ -108386,6 +108396,8 @@ service.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheBloomsOnWrite--">shouldCacheBloomsOnWrite()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheCompactedBlocksOnWrite--">shouldCacheCompactedBlocksOnWrite()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheCompressed-org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory-">shouldCacheCompressed(BlockType.BlockCategory)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheDataCompressed--">shouldCacheDataCompressed()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 5c05b83..c7a503f 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -168,9 +168,9 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html b/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
index 56f9be0..71368d9 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
@@ -1572,7 +1572,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1203">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1205">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;obj)</pre>
 <div class="block">Compare the contents of the descriptor with another one passed as a
  parameter. Checks if the obj passed is an instance of ModifyableTableDescriptor,
  if yes then the contents of the descriptors are compared.</div>
@@ -1594,7 +1594,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1217">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1219">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -1609,7 +1609,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1239">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;other)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1241">compareTo</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;other)</pre>
 <div class="block">Compares the descriptor with another descriptor which is passed as a
  parameter. This compares the content of the two descriptors and not the
  reference.</div>
@@ -1630,7 +1630,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getColumnFamilies</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1244">getColumnFamilies</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1246">getColumnFamilies</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getColumnFamilies--">TableDescriptor</a></code></span></div>
 <div class="block">Returns an unmodifiable collection of all the <a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client"><code>ColumnFamilyDescriptor</code></a> of
  all the column families of the table.</div>
@@ -1649,7 +1649,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionReplication</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1252">getRegionReplication</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1254">getRegionReplication</a>()</pre>
 <div class="block">Returns the configured replicas per region</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1665,7 +1665,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionReplication</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1262">setRegionReplication</a>(int&nbsp;regionReplication)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1264">setRegionReplication</a>(int&nbsp;regionReplication)</pre>
 <div class="block">Sets the number of replicas per region.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1681,7 +1681,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>hasRegionMemStoreReplication</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1270">hasRegionMemStoreReplication</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1272">hasRegionMemStoreReplication</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#hasRegionMemStoreReplication--">hasRegionMemStoreReplication</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></dd>
@@ -1696,7 +1696,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setRegionMemStoreReplication</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1284">setRegionMemStoreReplication</a>(boolean&nbsp;memstoreReplication)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1286">setRegionMemStoreReplication</a>(boolean&nbsp;memstoreReplication)</pre>
 <div class="block">Enable or Disable the memstore replication from the primary region to the
  replicas. The replication will be used only for meta operations (e.g.
  flush, compaction, ...)</div>
@@ -1716,7 +1716,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setPriority</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1292">setPriority</a>(int&nbsp;priority)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1294">setPriority</a>(int&nbsp;priority)</pre>
 </li>
 </ul>
 <a name="getPriority--">
@@ -1725,7 +1725,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getPriority</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1297">getPriority</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1299">getPriority</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getPriority--">getPriority</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a></code></dd>
@@ -1738,7 +1738,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getColumnFamilyNames</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1310">getColumnFamilyNames</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1312">getColumnFamilyNames</a>()</pre>
 <div class="block">Returns all the column family names of the current table. The map of
  TableDescriptor contains mapping of family name to ColumnFamilyDescriptor.
  This returns all the keys of the family map which represents the column
@@ -1757,7 +1757,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1323">getColumnFamily</a>(byte[]&nbsp;column)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1325">getColumnFamily</a>(byte[]&nbsp;column)</pre>
 <div class="block">Returns the ColumnFamilyDescriptor for a specific column family with name as
  specified by the parameter column.</div>
 <dl>
@@ -1777,7 +1777,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>removeColumnFamily</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1335">removeColumnFamily</a>(byte[]&nbsp;column)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1337">removeColumnFamily</a>(byte[]&nbsp;column)</pre>
 <div class="block">Removes the ColumnFamilyDescriptor with name specified by the parameter column
  from the table descriptor</div>
 <dl>
@@ -1795,7 +1795,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1349">setCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or inte [...]
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1351">setCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or inte [...]
                                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Add a table coprocessor to this table. The coprocessor type must be
  org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't
@@ -1817,7 +1817,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1364">setCoprocessor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apac [...]
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1366">setCoprocessor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apac [...]
                                                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Add a table coprocessor to this table. The coprocessor type must be
  org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't
@@ -1838,7 +1838,7 @@ public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/Tabl
 <li class="blockList">
 <h4>setCoprocessorWithSpec</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1408">setCoprocessorWithSpec</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or i [...]
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1410">setCoprocessorWithSpec</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or i [...]
                                                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">used by HTableDescriptor and admin.rb.
                        As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
@@ -1862,7 +1862,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>checkHasCoprocessor</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1417">checkHasCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1419">checkHasCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -1876,7 +1876,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessorToMap</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1428">setCoprocessorToMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class o [...]
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1430">setCoprocessorToMap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class o [...]
 <div class="block">Add coprocessor to values Map</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1892,7 +1892,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>hasCoprocessor</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1455">hasCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classNameToMatch)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1457">hasCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;classNameToMatch)</pre>
 <div class="block">Check if the table has an attached co-processor represented by the name
  className</div>
 <dl>
@@ -1911,7 +1911,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessorDescriptors</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1467">getCoprocessorDescriptors</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1469">getCoprocessorDescriptors</a>()</pre>
 <div class="block">Return the list of attached co-processor represented by their name
  className</div>
 <dl>
@@ -1928,7 +1928,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockList">
 <li class="blockList">
 <h4>removeCoprocessor</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1484">removeCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1486">removeCoprocessor</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;className)</pre>
 <div class="block">Remove a coprocessor from those set on the table</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1943,7 +1943,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <li class="blockList">
 <h4>setOwner</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1519">setOwner</a>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User [...]
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1521">setOwner</a>(<a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User [...]
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0.</span></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1958,7 +1958,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <li class="blockList">
 <h4>setOwnerString</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1529">setOwnerString</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface [...]
+public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html" title="class in org.apache.hadoop.hbase.client">TableDescriptorBuilder.ModifyableTableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1531">setOwnerString</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface [...]
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0.</span></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -1973,7 +1973,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <li class="blockList">
 <h4>getOwnerString</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1539">getOwnerString</a>()</pre>
+public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1541">getOwnerString</a>()</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.0.0 and will be removed in 3.0.0.</span></div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1989,7 +1989,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>toByteArray</h4>
-<pre>private&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1549">toByteArray</a>()</pre>
+<pre>private&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1551">toByteArray</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the bytes in pb format</dd>
@@ -2002,7 +2002,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockList">
 <li class="blockList">
 <h4>parseFrom</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1561">parseFrom</a>(byte[]&nbsp;bytes)
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1563">parseFrom</a>(byte[]&nbsp;bytes)
                                   throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2024,7 +2024,7 @@ public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getColumnFamilyCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1577">getColumnFamilyCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html#line.1579">getColumnFamilyCount</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html#getColumnFamilyCount--">TableDescriptor</a></code></span></div>
 <div class="block">Returns the count of the column families of the table.</div>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html b/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
index 34d59d1..bca3980 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
@@ -1855,7 +1855,7 @@ public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescript
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toCoprocessorDescriptor</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.1582">toCoprocessorDescriptor</a>(<a href="https:// [...]
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/CoprocessorDescriptor.html" title="interface in org.apache.hadoop.hbase.client">CoprocessorDescriptor</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html#line.1584">toCoprocessorDescriptor</a>(<a href="https:// [...]
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 5e842cf..46c64bf 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -427,20 +427,20 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index a4c9e40..2c28ac6 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -191,12 +191,12 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
index 9eebaf0..abc40ba 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
@@ -92,8 +92,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
index dac172906..27b150c 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -139,9 +139,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/HttpConfig.Policy.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">HttpConfig.Policy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheConfig.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
index 7f08ef2..00add0a 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -153,29 +153,41 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY">CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY</a></span></code>
+<div class="block">Configuration key to cache blocks when a compacted file is written</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#CACHE_DATA_BLOCKS_COMPRESSED_KEY">CACHE_DATA_BLOCKS_COMPRESSED_KEY</a></span></code>
 <div class="block">Configuration key to cache data blocks in compressed and/or encrypted format.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#CACHE_DATA_ON_READ_KEY">CACHE_DATA_ON_READ_KEY</a></span></code>
 <div class="block">Configuration key to cache data blocks on read.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#CACHE_INDEX_BLOCKS_ON_WRITE_KEY">CACHE_INDEX_BLOCKS_ON_WRITE_KEY</a></span></code>
 <div class="block">Configuration key to cache leaf and intermediate-level index blocks on
  write.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#cacheBloomsOnWrite">cacheBloomsOnWrite</a></span></code>
 <div class="block">Whether compound bloom filter blocks should be cached on write</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#cacheCompactedDataOnWrite">cacheCompactedDataOnWrite</a></span></code>
+<div class="block">Whether data blocks should be cached when compacted file is written</div>
+</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#cacheDataCompressed">cacheDataCompressed</a></span></code>
@@ -207,81 +219,85 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_DATA_COMPRESSED">DEFAULT_CACHE_DATA_COMPRESSED</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE">DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_DATA_ON_READ">DEFAULT_CACHE_DATA_ON_READ</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_DATA_COMPRESSED">DEFAULT_CACHE_DATA_COMPRESSED</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_DATA_ON_WRITE">DEFAULT_CACHE_DATA_ON_WRITE</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_DATA_ON_READ">DEFAULT_CACHE_DATA_ON_READ</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_INDEXES_ON_WRITE">DEFAULT_CACHE_INDEXES_ON_WRITE</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_DATA_ON_WRITE">DEFAULT_CACHE_DATA_ON_WRITE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_EVICT_ON_CLOSE">DEFAULT_EVICT_ON_CLOSE</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_CACHE_INDEXES_ON_WRITE">DEFAULT_CACHE_INDEXES_ON_WRITE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_IN_MEMORY">DEFAULT_IN_MEMORY</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_EVICT_ON_CLOSE">DEFAULT_EVICT_ON_CLOSE</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_PREFETCH_ON_OPEN">DEFAULT_PREFETCH_ON_OPEN</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_IN_MEMORY">DEFAULT_IN_MEMORY</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>static boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DEFAULT_PREFETCH_ON_OPEN">DEFAULT_PREFETCH_ON_OPEN</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DISABLED">DISABLED</a></span></code>
 <div class="block">Disabled cache configuration</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DROP_BEHIND_CACHE_COMPACTION_DEFAULT">DROP_BEHIND_CACHE_COMPACTION_DEFAULT</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#DROP_BEHIND_CACHE_COMPACTION_KEY">DROP_BEHIND_CACHE_COMPACTION_KEY</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#dropBehindCompaction">dropBehindCompaction</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#EVICT_BLOCKS_ON_CLOSE_KEY">EVICT_BLOCKS_ON_CLOSE_KEY</a></span></code>
 <div class="block">Configuration key to evict all blocks of a given file from the block cache
  when the file is closed.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#evictOnClose">evictOnClose</a></span></code>
 <div class="block">Whether blocks of a file should be evicted when the file is closed</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#inMemory">inMemory</a></span></code>
 <div class="block">Whether blocks should be flagged as in-memory when being cached</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static org.slf4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#PREFETCH_BLOCKS_ON_OPEN_KEY">PREFETCH_BLOCKS_ON_OPEN_KEY</a></span></code>
 <div class="block">Configuration key to prefetch all blocks of a given file into the block cache
  when the file is opened.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#prefetchOnOpen">prefetchOnOpen</a></span></code>
 <div class="block">Whether data blocks should be prefetched into the cache</div>
@@ -391,53 +407,57 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheCompressed-org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory-">shouldCacheCompressed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType.BlockCategory</a>&nbsp;category)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheCompactedBlocksOnWrite--">shouldCacheCompactedBlocksOnWrite</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheDataCompressed--">shouldCacheDataCompressed</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheCompressed-org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory-">shouldCacheCompressed</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType.BlockCategory</a>&nbsp;category)</code>&nbsp;</td>
 </tr>
 <tr id="i10" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheDataCompressed--">shouldCacheDataCompressed</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheDataOnRead--">shouldCacheDataOnRead</a></span>()</code>
 <div class="block">Returns whether the DATA blocks of this HFile should be cached on read or not (we always
  cache the meta blocks, the INDEX and BLOOM blocks).</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheDataOnWrite--">shouldCacheDataOnWrite</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldCacheIndexesOnWrite--">shouldCacheIndexesOnWrite</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldDropBehindCompaction--">shouldDropBehindCompaction</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldEvictOnClose--">shouldEvictOnClose</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldLockOnCacheMiss-org.apache.hadoop.hbase.io.hfile.BlockType-">shouldLockOnCacheMiss</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType</a>&nbsp;blockType)</code>
 <div class="block">If we make sure the block could not be cached, we will not acquire the lock
  otherwise we will acquire lock</div>
 </td>
 </tr>
-<tr id="i16" class="altColor">
+<tr id="i17" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldPrefetchOnOpen--">shouldPrefetchOnOpen</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i17" class="rowColor">
+<tr id="i18" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#shouldReadBlockFromCache-org.apache.hadoop.hbase.io.hfile.BlockType-">shouldReadBlockFromCache</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType</a>&nbsp;blockType)</code>
 <div class="block">Return true if we may find this type of block in block cache.</div>
 </td>
 </tr>
-<tr id="i18" class="altColor">
+<tr id="i19" class="rowColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
@@ -585,13 +605,27 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
+<a name="CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY</h4>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.87">CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY</a></pre>
+<div class="block">Configuration key to cache blocks when a compacted file is written</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 <a name="DROP_BEHIND_CACHE_COMPACTION_KEY">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>DROP_BEHIND_CACHE_COMPACTION_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.84">DROP_BEHIND_CACHE_COMPACTION_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.90">DROP_BEHIND_CACHE_COMPACTION_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DROP_BEHIND_CACHE_COMPACTION_KEY">Constant Field Values</a></dd>
@@ -604,7 +638,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_CACHE_DATA_ON_READ</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.88">DEFAULT_CACHE_DATA_ON_READ</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.94">DEFAULT_CACHE_DATA_ON_READ</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_DATA_ON_READ">Constant Field Values</a></dd>
@@ -617,7 +651,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_CACHE_DATA_ON_WRITE</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.89">DEFAULT_CACHE_DATA_ON_WRITE</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.95">DEFAULT_CACHE_DATA_ON_WRITE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_DATA_ON_WRITE">Constant Field Values</a></dd>
@@ -630,7 +664,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_IN_MEMORY</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.90">DEFAULT_IN_MEMORY</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.96">DEFAULT_IN_MEMORY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_IN_MEMORY">Constant Field Values</a></dd>
@@ -643,7 +677,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_CACHE_INDEXES_ON_WRITE</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.91">DEFAULT_CACHE_INDEXES_ON_WRITE</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.97">DEFAULT_CACHE_INDEXES_ON_WRITE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_INDEXES_ON_WRITE">Constant Field Values</a></dd>
@@ -656,7 +690,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_CACHE_BLOOMS_ON_WRITE</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.92">DEFAULT_CACHE_BLOOMS_ON_WRITE</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.98">DEFAULT_CACHE_BLOOMS_ON_WRITE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_BLOOMS_ON_WRITE">Constant Field Values</a></dd>
@@ -669,7 +703,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_EVICT_ON_CLOSE</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.93">DEFAULT_EVICT_ON_CLOSE</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.99">DEFAULT_EVICT_ON_CLOSE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_EVICT_ON_CLOSE">Constant Field Values</a></dd>
@@ -682,7 +716,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_CACHE_DATA_COMPRESSED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.94">DEFAULT_CACHE_DATA_COMPRESSED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.100">DEFAULT_CACHE_DATA_COMPRESSED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_DATA_COMPRESSED">Constant Field Values</a></dd>
@@ -695,20 +729,33 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_PREFETCH_ON_OPEN</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.95">DEFAULT_PREFETCH_ON_OPEN</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.101">DEFAULT_PREFETCH_ON_OPEN</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_PREFETCH_ON_OPEN">Constant Field Values</a></dd>
 </dl>
 </li>
 </ul>
+<a name="DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE</h4>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.102">DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 <a name="DROP_BEHIND_CACHE_COMPACTION_DEFAULT">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>DROP_BEHIND_CACHE_COMPACTION_DEFAULT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.96">DROP_BEHIND_CACHE_COMPACTION_DEFAULT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.103">DROP_BEHIND_CACHE_COMPACTION_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.CacheConfig.DROP_BEHIND_CACHE_COMPACTION_DEFAULT">Constant Field Values</a></dd>
@@ -721,7 +768,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheDataOnRead</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.104">cacheDataOnRead</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.111">cacheDataOnRead</a></pre>
 <div class="block">Whether blocks should be cached on read (default is on if there is a
  cache but this can be turned off on a per-family or per-request basis).
  If off we will STILL cache meta blocks; i.e. INDEX and BLOOM types.
@@ -734,7 +781,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>inMemory</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.107">inMemory</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.114">inMemory</a></pre>
 <div class="block">Whether blocks should be flagged as in-memory when being cached</div>
 </li>
 </ul>
@@ -744,7 +791,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheDataOnWrite</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.110">cacheDataOnWrite</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.117">cacheDataOnWrite</a></pre>
 <div class="block">Whether data blocks should be cached when new files are written</div>
 </li>
 </ul>
@@ -754,7 +801,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheIndexesOnWrite</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.113">cacheIndexesOnWrite</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.120">cacheIndexesOnWrite</a></pre>
 <div class="block">Whether index blocks should be cached when new files are written</div>
 </li>
 </ul>
@@ -764,7 +811,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheBloomsOnWrite</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.116">cacheBloomsOnWrite</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.123">cacheBloomsOnWrite</a></pre>
 <div class="block">Whether compound bloom filter blocks should be cached on write</div>
 </li>
 </ul>
@@ -774,7 +821,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>evictOnClose</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.119">evictOnClose</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.126">evictOnClose</a></pre>
 <div class="block">Whether blocks of a file should be evicted when the file is closed</div>
 </li>
 </ul>
@@ -784,7 +831,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheDataCompressed</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.122">cacheDataCompressed</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.129">cacheDataCompressed</a></pre>
 <div class="block">Whether data blocks should be stored in compressed and/or encrypted form in the cache</div>
 </li>
 </ul>
@@ -794,17 +841,27 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>prefetchOnOpen</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.125">prefetchOnOpen</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.132">prefetchOnOpen</a></pre>
 <div class="block">Whether data blocks should be prefetched into the cache</div>
 </li>
 </ul>
+<a name="cacheCompactedDataOnWrite">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>cacheCompactedDataOnWrite</h4>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.137">cacheCompactedDataOnWrite</a></pre>
+<div class="block">Whether data blocks should be cached when compacted file is written</div>
+</li>
+</ul>
 <a name="dropBehindCompaction">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>dropBehindCompaction</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.127">dropBehindCompaction</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.139">dropBehindCompaction</a></pre>
 </li>
 </ul>
 <a name="blockCache">
@@ -813,7 +870,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>blockCache</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.130">blockCache</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.142">blockCache</a></pre>
 </li>
 </ul>
 <a name="byteBuffAllocator">
@@ -822,7 +879,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>byteBuffAllocator</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/ByteBuffAllocator.html" title="class in org.apache.hadoop.hbase.io">ByteBuffAllocator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.132">byteBuffAllocator</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/ByteBuffAllocator.html" title="class in org.apache.hadoop.hbase.io">ByteBuffAllocator</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.144">byteBuffAllocator</a></pre>
 </li>
 </ul>
 </li>
@@ -839,7 +896,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CacheConfig</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.139">CacheConfig</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.151">CacheConfig</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Create a cache configuration using the specified configuration object and
  defaults for family level settings. Only use if no column family context.</div>
 <dl>
@@ -854,7 +911,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CacheConfig</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.143">CacheConfig</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.155">CacheConfig</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                    <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;blockCache)</pre>
 </li>
 </ul>
@@ -864,7 +921,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CacheConfig</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.153">CacheConfig</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.165">CacheConfig</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                    <a href="../../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family,
                    <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;blockCache,
                    <a href="../../../../../../org/apache/hadoop/hbase/io/ByteBuffAllocator.html" title="class in org.apache.hadoop.hbase.io">ByteBuffAllocator</a>&nbsp;byteBuffAllocator)</pre>
@@ -883,7 +940,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>CacheConfig</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.187">CacheConfig</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;cacheConf)</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.201">CacheConfig</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a>&nbsp;cacheConf)</pre>
 <div class="block">Constructs a cache configuration copied from the specified configuration.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -897,7 +954,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CacheConfig</h4>
-<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.201">CacheConfig</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.216">CacheConfig</a>()</pre>
 </li>
 </ul>
 </li>
@@ -914,7 +971,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldCacheDataOnRead</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.220">shouldCacheDataOnRead</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.236">shouldCacheDataOnRead</a>()</pre>
 <div class="block">Returns whether the DATA blocks of this HFile should be cached on read or not (we always
  cache the meta blocks, the INDEX and BLOOM blocks).</div>
 <dl>
@@ -929,7 +986,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldDropBehindCompaction</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.224">shouldDropBehindCompaction</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.240">shouldDropBehindCompaction</a>()</pre>
 </li>
 </ul>
 <a name="shouldCacheBlockOnRead-org.apache.hadoop.hbase.io.hfile.BlockType.BlockCategory-">
@@ -938,7 +995,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldCacheBlockOnRead</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.233">shouldCacheBlockOnRead</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType.BlockCategory</a>&nbsp;category)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.249">shouldCacheBlockOnRead</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType.BlockCategory</a>&nbsp;category)</pre>
 <div class="block">Should we cache a block of a particular category? We always cache
  important blocks such as index blocks, as long as the block cache is
  available.</div>
@@ -950,7 +1007,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isInMemory</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.241">isInMemory</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.257">isInMemory</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if blocks in this file should be flagged as in-memory</dd>
@@ -963,7 +1020,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldCacheDataOnWrite</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.249">shouldCacheDataOnWrite</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.265">shouldCacheDataOnWrite</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if data blocks should be written to the cache when an HFile is
@@ -977,7 +1034,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setCacheDataOnWrite</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.258">setCacheDataOnWrite</a>(boolean&nbsp;cacheDataOnWrite)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.274">setCacheDataOnWrite</a>(boolean&nbsp;cacheDataOnWrite)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>cacheDataOnWrite</code> - whether data blocks should be written to the cache
@@ -991,7 +1048,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldCacheIndexesOnWrite</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.266">shouldCacheIndexesOnWrite</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.282">shouldCacheIndexesOnWrite</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if index blocks should be written to the cache when an HFile
@@ -1005,7 +1062,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldCacheBloomsOnWrite</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.274">shouldCacheBloomsOnWrite</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.290">shouldCacheBloomsOnWrite</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if bloom blocks should be written to the cache when an HFile
@@ -1019,7 +1076,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldEvictOnClose</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.282">shouldEvictOnClose</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.298">shouldEvictOnClose</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if blocks should be evicted from the cache when an HFile
@@ -1033,7 +1090,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setEvictOnClose</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.292">setEvictOnClose</a>(boolean&nbsp;evictOnClose)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.308">setEvictOnClose</a>(boolean&nbsp;evictOnClose)</pre>
 <div class="block">Only used for testing.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -1048,7 +1105,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldCacheDataCompressed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.299">shouldCacheDataCompressed</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.315">shouldCacheDataCompressed</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if data blocks should be compressed in the cache, false if not</dd>
@@ -1061,7 +1118,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldCacheCompressed</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.306">shouldCacheCompressed</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType.BlockCategory</a>&nbsp;category)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.322">shouldCacheCompressed</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType.BlockCategory</a>&nbsp;category)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if this <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><code>BlockType.BlockCategory</code></a> should be compressed in blockcache, false otherwise</dd>
@@ -1074,20 +1131,33 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldPrefetchOnOpen</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.318">shouldPrefetchOnOpen</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.334">shouldPrefetchOnOpen</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if blocks should be prefetched into the cache on open, false if not</dd>
 </dl>
 </li>
 </ul>
+<a name="shouldCacheCompactedBlocksOnWrite--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>shouldCacheCompactedBlocksOnWrite</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.341">shouldCacheCompactedBlocksOnWrite</a>()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>true if blocks should be cached while writing during compaction, false if not</dd>
+</dl>
+</li>
+</ul>
 <a name="shouldReadBlockFromCache-org.apache.hadoop.hbase.io.hfile.BlockType-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldReadBlockFromCache</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.330">shouldReadBlockFromCache</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType</a>&nbsp;blockType)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.353">shouldReadBlockFromCache</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType</a>&nbsp;blockType)</pre>
 <div class="block">Return true if we may find this type of block in block cache.
  <p>
  TODO: today <code>family.isBlockCacheEnabled()</code> only means <code>cacheDataOnRead</code>, so here we
@@ -1102,7 +1172,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldLockOnCacheMiss</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.354">shouldLockOnCacheMiss</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType</a>&nbsp;blockType)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.377">shouldLockOnCacheMiss</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockType</a>&nbsp;blockType)</pre>
 <div class="block">If we make sure the block could not be cached, we will not acquire the lock
  otherwise we will acquire lock</div>
 </li>
@@ -1113,7 +1183,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCache</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.366">getBlockCache</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html?is-external=true" title="class or interface in java.util">Optional</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.389">getBlockCache</a>()</pre>
 <div class="block">Returns the block cache.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -1127,7 +1197,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isCombinedBlockCache</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.370">isCombinedBlockCache</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.393">isCombinedBlockCache</a>()</pre>
 </li>
 </ul>
 <a name="getByteBuffAllocator--">
@@ -1136,7 +1206,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getByteBuffAllocator</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/ByteBuffAllocator.html" title="class in org.apache.hadoop.hbase.io">ByteBuffAllocator</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.374">getByteBuffAllocator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/ByteBuffAllocator.html" title="class in org.apache.hadoop.hbase.io">ByteBuffAllocator</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.397">getByteBuffAllocator</a>()</pre>
 </li>
 </ul>
 <a name="toString--">
@@ -1145,7 +1215,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.379">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html#line.402">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 7943a4a..a40f0e1 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -305,12 +305,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 6839aae..2771f2a 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -357,8 +357,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index b1f84f9..551959a 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -296,10 +296,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index b988a3c..b3e7c99 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -151,8 +151,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">ServerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 54b8a68..60d69b9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -199,8 +199,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index c9d3f9c..995b783 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -362,12 +362,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 6e1b010..f99318a 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -221,8 +221,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 66e19a4..002467d 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -425,18 +425,18 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MetaTableAccessor.QueryType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index c066a88..187c531 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,11 +216,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 44ec468..85eb37b 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -240,12 +240,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index f87434d..7fe38ca 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -729,20 +729,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index eb39c79..8eef1de 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -247,10 +247,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index f9cc9c1..032ff0a 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -163,11 +163,11 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 25eb637..3e32f6b 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -192,9 +192,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 6b23a96..60c52af 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -211,9 +211,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index b99cdb8..217ff23 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -560,12 +560,12 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLockWithObjectPool.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLockWithObjectPool.ReferenceType</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 38fca8d..9be5ada 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -193,8 +193,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 3c4a65e..877fa11 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -18,9 +18,9 @@
 <span class="sourceLineNo">010</span>  justification="Intentional; to be modified in test")<a name="line.10"></a>
 <span class="sourceLineNo">011</span>public class Version {<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String version = new String("3.0.0-SNAPSHOT");<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String revision = "de87d72bb4da44549d76bc98b31d75165bb08aaa";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String revision = "eee9480cb40fe3fe1d88b333d451c1128789cb7b";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String user = "jenkins";<a name="line.14"></a>
-<span class="sourceLineNo">015</span>  public static final String date = "Sat Dec 14 14:36:41 UTC 2019";<a name="line.15"></a>
+<span class="sourceLineNo">015</span>  public static final String date = "Mon Dec 16 14:36:23 UTC 2019";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>  public static final String url = "git://jenkins-websites-he-de.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.16"></a>
 <span class="sourceLineNo">017</span>  public static final String srcChecksum = "(stdin)=";<a name="line.17"></a>
 <span class="sourceLineNo">018</span>}<a name="line.18"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
index d8a909f..2f17833 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.ModifyableTableDescriptor.html
@@ -1191,439 +1191,441 @@
 <span class="sourceLineNo">1183</span>          }<a name="line.1183"></a>
 <span class="sourceLineNo">1184</span>          s.append("}");<a name="line.1184"></a>
 <span class="sourceLineNo">1185</span>        }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>      }<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span><a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>      s.append("}"); // end METHOD<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      return s;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    }<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span><a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    /**<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>     * Compare the contents of the descriptor with another one passed as a<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>     * parameter. Checks if the obj passed is an instance of ModifyableTableDescriptor,<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>     * if yes then the contents of the descriptors are compared.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>     *<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>     * @param obj The object to compare<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>     * @return true if the contents of the the two descriptors exactly match<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>     *<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>     * @see java.lang.Object#equals(java.lang.Object)<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>     */<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    @Override<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>    public boolean equals(Object obj) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      if (this == obj) {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>        return true;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      if (obj instanceof ModifyableTableDescriptor) {<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>        return TableDescriptor.COMPARATOR.compare(this, (ModifyableTableDescriptor) obj) == 0;<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      }<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      return false;<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>     * @return hash code<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>     */<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    @Override<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>    public int hashCode() {<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      int result = this.name.hashCode();<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      if (this.families.size() &gt; 0) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>        for (ColumnFamilyDescriptor e : this.families.values()) {<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>          result ^= e.hashCode();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>        }<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      result ^= values.hashCode();<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      return result;<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    }<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span><a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>    // Comparable<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    /**<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>     * Compares the descriptor with another descriptor which is passed as a<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>     * parameter. This compares the content of the two descriptors and not the<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>     * reference.<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>     *<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>     * @param other The MTD to compare<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>     * @return 0 if the contents of the descriptors are exactly matching, 1 if<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>     * there is a mismatch in the contents<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>     */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    @Override<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    public int compareTo(final ModifyableTableDescriptor other) {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      return TableDescriptor.COMPARATOR.compare(this, other);<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>    }<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span><a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    @Override<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    public ColumnFamilyDescriptor[] getColumnFamilies() {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      return families.values().toArray(new ColumnFamilyDescriptor[families.size()]);<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span><a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    /**<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>     * Returns the configured replicas per region<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>     */<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    @Override<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    public int getRegionReplication() {<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      return getOrDefault(REGION_REPLICATION_KEY, Integer::valueOf, DEFAULT_REGION_REPLICATION);<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>     * Sets the number of replicas per region.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>     *<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>     * @param regionReplication the replication factor per region<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>     * @return the modifyable TD<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>     */<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>    public ModifyableTableDescriptor setRegionReplication(int regionReplication) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      return setValue(REGION_REPLICATION_KEY, Integer.toString(regionReplication));<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span><a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    /**<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>     * @return true if the read-replicas memstore replication is enabled.<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>     */<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    @Override<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    public boolean hasRegionMemStoreReplication() {<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>      return getOrDefault(REGION_MEMSTORE_REPLICATION_KEY, Boolean::valueOf, DEFAULT_REGION_MEMSTORE_REPLICATION);<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>    }<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span><a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>    /**<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>     * Enable or Disable the memstore replication from the primary region to the<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>     * replicas. The replication will be used only for meta operations (e.g.<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>     * flush, compaction, ...)<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>     *<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>     * @param memstoreReplication true if the new data written to the primary<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>     * region should be replicated. false if the secondaries can tollerate to<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>     * have new data only when the primary flushes the memstore.<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>     * @return the modifyable TD<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>     */<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    public ModifyableTableDescriptor setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>      setValue(REGION_MEMSTORE_REPLICATION_KEY, Boolean.toString(memstoreReplication));<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      // If the memstore replication is setup, we do not have to wait for observing a flush event<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>      // from primary before starting to serve reads, because gaps from replication is not applicable<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>      return setValue(REGION_REPLICA_WAIT_FOR_PRIMARY_FLUSH_CONF_KEY,<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>              Boolean.toString(memstoreReplication));<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>    public ModifyableTableDescriptor setPriority(int priority) {<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>      return setValue(PRIORITY_KEY, Integer.toString(priority));<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>    }<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span><a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    @Override<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    public int getPriority() {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      return getOrDefault(PRIORITY_KEY, Integer::valueOf, DEFAULT_PRIORITY);<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    }<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span><a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>    /**<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>     * Returns all the column family names of the current table. The map of<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>     * TableDescriptor contains mapping of family name to ColumnFamilyDescriptor.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>     * This returns all the keys of the family map which represents the column<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>     * family names of the table.<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>     *<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>     * @return Immutable sorted set of the keys of the families.<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>     */<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    @Override<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    public Set&lt;byte[]&gt; getColumnFamilyNames() {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return Collections.unmodifiableSet(this.families.keySet());<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>    /**<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>     * Returns the ColumnFamilyDescriptor for a specific column family with name as<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>     * specified by the parameter column.<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>     *<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>     * @param column Column family name<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>     * passed in column.<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>     */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    @Override<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    public ColumnFamilyDescriptor getColumnFamily(final byte[] column) {<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      return this.families.get(column);<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>    /**<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>     * Removes the ColumnFamilyDescriptor with name specified by the parameter column<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>     * from the table descriptor<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>     *<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>     * @param column Name of the column family to be removed.<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>     * passed in column.<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>     */<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    public ColumnFamilyDescriptor removeColumnFamily(final byte[] column) {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>      return this.families.remove(column);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    }<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>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>     * loadable or not will be determined when a region is opened.<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>     *<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>     * @param className Full class name.<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>     * @throws IOException<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>     * @return the modifyable TD<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>     */<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    public ModifyableTableDescriptor setCoprocessor(String className) throws IOException {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      return setCoprocessor(<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>        CoprocessorDescriptorBuilder.newBuilder(className).setPriority(Coprocessor.PRIORITY_USER)<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>          .build());<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    }<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span><a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>    /**<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>     * loadable or not will be determined when a region is opened.<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>     *<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>     * @throws IOException any illegal parameter key/value<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>     * @return the modifyable TD<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>     */<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    public ModifyableTableDescriptor setCoprocessor(CoprocessorDescriptor cp)<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>            throws IOException {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      checkHasCoprocessor(cp.getClassName());<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      if (cp.getPriority() &lt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>        throw new IOException("Priority must be bigger than or equal with zero, current:"<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          + cp.getPriority());<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      }<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      // Validate parameter kvs and then add key/values to kvString.<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>      StringBuilder kvString = new StringBuilder();<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      for (Map.Entry&lt;String, String&gt; e : cp.getProperties().entrySet()) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        if (!e.getKey().matches(CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN)) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          throw new IOException("Illegal parameter key = " + e.getKey());<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>        }<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>        if (!e.getValue().matches(CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN)) {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>          throw new IOException("Illegal parameter (" + e.getKey()<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>                  + ") value = " + e.getValue());<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>        if (kvString.length() != 0) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>          kvString.append(',');<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>        }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        kvString.append(e.getKey());<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        kvString.append('=');<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        kvString.append(e.getValue());<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      String value = cp.getJarPath().orElse("")<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>              + "|" + cp.getClassName() + "|" + Integer.toString(cp.getPriority()) + "|"<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>              + kvString.toString();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      return setCoprocessorToMap(value);<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    /**<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>     * loadable or not will be determined when a region is opened.<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>     *<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>     * @throws IOException<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>     * @return the modifyable TD<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>     * @deprecated used by HTableDescriptor and admin.rb.<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>     *                       As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>     */<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    @Deprecated<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    public ModifyableTableDescriptor setCoprocessorWithSpec(final String specStr)<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      throws IOException {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>      CoprocessorDescriptor cpDesc = toCoprocessorDescriptor(specStr).orElseThrow(<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        () -&gt; new IllegalArgumentException(<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          "Format does not match " + CP_HTD_ATTR_VALUE_PATTERN + ": " + specStr));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>      checkHasCoprocessor(cpDesc.getClassName());<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      return setCoprocessorToMap(specStr);<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    }<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span><a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>    private void checkHasCoprocessor(final String className) throws IOException {<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      if (hasCoprocessor(className)) {<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>        throw new IOException("Coprocessor " + className + " already exists.");<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>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    /**<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * Add coprocessor to values Map<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>     * @return Returns &lt;code&gt;this&lt;/code&gt;<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>     */<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    private ModifyableTableDescriptor setCoprocessorToMap(final String specStr) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      if (specStr == null) {<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        return this;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      // generate a coprocessor key<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      int maxCoprocessorNumber = 0;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      Matcher keyMatcher;<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values.entrySet()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e.getKey().get()));<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>        if (!keyMatcher.matches()) {<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>          continue;<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        }<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>        maxCoprocessorNumber = Math.max(Integer.parseInt(keyMatcher.group(1)), maxCoprocessorNumber);<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      }<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      maxCoprocessorNumber++;<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      String key = "coprocessor$" + Integer.toString(maxCoprocessorNumber);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      return setValue(new Bytes(Bytes.toBytes(key)), new Bytes(Bytes.toBytes(specStr)));<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span><a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>    /**<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>     * Check if the table has an attached co-processor represented by the name<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>     * className<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>     *<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>     * @param classNameToMatch - Class name of the co-processor<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>     * @return true of the table has a co-processor className<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>     */<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>    @Override<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    public boolean hasCoprocessor(String classNameToMatch) {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>      return getCoprocessorDescriptors().stream().anyMatch(cp -&gt; cp.getClassName()<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        .equals(classNameToMatch));<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span><a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    /**<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>     * Return the list of attached co-processor represented by their name<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>     * className<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     *<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @return The list of co-processors classNames<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     */<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    @Override<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    public List&lt;CoprocessorDescriptor&gt; getCoprocessorDescriptors() {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      List&lt;CoprocessorDescriptor&gt; result = new ArrayList&lt;&gt;();<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e: getValues().entrySet()) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>        String key = Bytes.toString(e.getKey().get()).trim();<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        if (CP_HTD_ATTR_KEY_PATTERN.matcher(key).matches()) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>          toCoprocessorDescriptor(Bytes.toString(e.getValue().get()).trim())<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>            .ifPresent(result::add);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      }<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      return result;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>    }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span><a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    /**<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>     * Remove a coprocessor from those set on the table<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>     *<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>     * @param className Class name of the co-processor<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>     */<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    public void removeCoprocessor(String className) {<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      Bytes match = null;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>      Matcher keyMatcher;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      Matcher valueMatcher;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>              .entrySet()) {<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>                .getKey().get()));<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>        if (!keyMatcher.matches()) {<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          continue;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>        }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        valueMatcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(Bytes<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>                .toString(e.getValue().get()));<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>        if (!valueMatcher.matches()) {<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>          continue;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>        }<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>        // get className and compare<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        String clazz = valueMatcher.group(2).trim(); // classname is the 2nd field<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        // remove the CP if it is present<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        if (clazz.equals(className.trim())) {<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>          match = e.getKey();<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>          break;<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      // if we found a match, remove it<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      if (match != null) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        ModifyableTableDescriptor.this.removeValue(match);<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>      }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    }<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    /**<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>     */<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    @Deprecated<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    public ModifyableTableDescriptor setOwner(User owner) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      return setOwnerString(owner != null ? owner.getShortName() : null);<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span><a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    /**<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    // used by admin.rb:alter(table_name,*args) to update owner.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>    @Deprecated<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    public ModifyableTableDescriptor setOwnerString(String ownerString) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return setValue(OWNER_KEY, ownerString);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    /**<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     */<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    @Override<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    @Deprecated<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    public String getOwnerString() {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      // Note that every table should have an owner (i.e. should have OWNER_KEY set).<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      // hbase:meta should return system user as owner, not null (see<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      // MasterFileSystem.java:bootstrap()).<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      return getOrDefault(OWNER_KEY, Function.identity(), null);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>    }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span><a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    /**<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>     * @return the bytes in pb format<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>     */<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>    private byte[] toByteArray() {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      return ProtobufUtil.prependPBMagic(ProtobufUtil.toTableSchema(this).toByteArray());<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>    }<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span><a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>    /**<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>     * @param bytes A pb serialized {@link ModifyableTableDescriptor} instance<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>     * with pb magic prefix<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>     * @return An instance of {@link ModifyableTableDescriptor} made from<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>     * &lt;code&gt;bytes&lt;/code&gt;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>     * @throws DeserializationException<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>     * @see #toByteArray()<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>     */<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    private static TableDescriptor parseFrom(final byte[] bytes)<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>            throws DeserializationException {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        throw new DeserializationException("Expected PB encoded ModifyableTableDescriptor");<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      HBaseProtos.TableSchema.Builder builder = HBaseProtos.TableSchema.newBuilder();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      try {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>        return ProtobufUtil.toTableDescriptor(builder.build());<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      } catch (IOException e) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        throw new DeserializationException(e);<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>      }<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>    }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>    @Override<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>    public int getColumnFamilyCount() {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      return families.size();<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>    }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>  }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span><a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>  private static Optional&lt;CoprocessorDescriptor&gt; toCoprocessorDescriptor(String spec) {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    Matcher matcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(spec);<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    if (matcher.matches()) {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // jar file path can be empty if the cp class can be loaded<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // from class loader.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      String path = matcher.group(1).trim().isEmpty() ?<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>        null : matcher.group(1).trim();<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      String className = matcher.group(2).trim();<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (className.isEmpty()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return Optional.empty();<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      String priorityStr = matcher.group(3).trim();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      int priority = priorityStr.isEmpty() ?<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>        Coprocessor.PRIORITY_USER : Integer.parseInt(priorityStr);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      String cfgSpec = null;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      try {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        cfgSpec = matcher.group(4);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      } catch (IndexOutOfBoundsException ex) {<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>        // ignore<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>      Map&lt;String, String&gt; ourConf = new TreeMap&lt;&gt;();<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      if (cfgSpec != null &amp;&amp; !cfgSpec.trim().equals("|")) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>        cfgSpec = cfgSpec.substring(cfgSpec.indexOf('|') + 1);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>        Matcher m = CP_HTD_ATTR_VALUE_PARAM_PATTERN.matcher(cfgSpec);<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        while (m.find()) {<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>          ourConf.put(m.group(1), m.group(2));<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      return Optional.of(CoprocessorDescriptorBuilder.newBuilder(className)<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        .setJarPath(path)<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        .setPriority(priority)<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        .setProperties(ourConf)<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>        .build());<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    }<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    return Optional.empty();<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>}<a name="line.1618"></a>
+<span class="sourceLineNo">1186</span><a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>        s.append("}");<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>      }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      s.append("}"); // end METHOD<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>      return s;<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    /**<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>     * Compare the contents of the descriptor with another one passed as a<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>     * parameter. Checks if the obj passed is an instance of ModifyableTableDescriptor,<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>     * if yes then the contents of the descriptors are compared.<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>     *<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>     * @param obj The object to compare<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>     * @return true if the contents of the the two descriptors exactly match<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>     *<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>     * @see java.lang.Object#equals(java.lang.Object)<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>     */<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>    @Override<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    public boolean equals(Object obj) {<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      if (this == obj) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>        return true;<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>      if (obj instanceof ModifyableTableDescriptor) {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>        return TableDescriptor.COMPARATOR.compare(this, (ModifyableTableDescriptor) obj) == 0;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      return false;<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    }<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span><a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    /**<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>     * @return hash code<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>     */<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    @Override<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>    public int hashCode() {<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>      int result = this.name.hashCode();<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      if (this.families.size() &gt; 0) {<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>        for (ColumnFamilyDescriptor e : this.families.values()) {<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>          result ^= e.hashCode();<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>        }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      }<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      result ^= values.hashCode();<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      return result;<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>    }<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span><a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>    // Comparable<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    /**<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>     * Compares the descriptor with another descriptor which is passed as a<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>     * parameter. This compares the content of the two descriptors and not the<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>     * reference.<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>     *<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>     * @param other The MTD to compare<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>     * @return 0 if the contents of the descriptors are exactly matching, 1 if<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>     * there is a mismatch in the contents<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>     */<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    @Override<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>    public int compareTo(final ModifyableTableDescriptor other) {<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      return TableDescriptor.COMPARATOR.compare(this, other);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    }<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span><a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    @Override<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>    public ColumnFamilyDescriptor[] getColumnFamilies() {<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      return families.values().toArray(new ColumnFamilyDescriptor[families.size()]);<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>    }<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 the configured replicas per region<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>     */<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    @Override<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    public int getRegionReplication() {<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      return getOrDefault(REGION_REPLICATION_KEY, Integer::valueOf, DEFAULT_REGION_REPLICATION);<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>    }<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span><a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    /**<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>     * Sets the number of replicas per region.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>     *<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>     * @param regionReplication the replication factor per region<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>     * @return the modifyable TD<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>     */<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>    public ModifyableTableDescriptor setRegionReplication(int regionReplication) {<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>      return setValue(REGION_REPLICATION_KEY, Integer.toString(regionReplication));<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    }<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span><a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    /**<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>     * @return true if the read-replicas memstore replication is enabled.<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>     */<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    @Override<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    public boolean hasRegionMemStoreReplication() {<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      return getOrDefault(REGION_MEMSTORE_REPLICATION_KEY, Boolean::valueOf, DEFAULT_REGION_MEMSTORE_REPLICATION);<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>    }<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span><a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    /**<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>     * Enable or Disable the memstore replication from the primary region to the<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>     * replicas. The replication will be used only for meta operations (e.g.<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>     * flush, compaction, ...)<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>     *<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>     * @param memstoreReplication true if the new data written to the primary<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>     * region should be replicated. false if the secondaries can tollerate to<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>     * have new data only when the primary flushes the memstore.<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>     * @return the modifyable TD<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>     */<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>    public ModifyableTableDescriptor setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>      setValue(REGION_MEMSTORE_REPLICATION_KEY, Boolean.toString(memstoreReplication));<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>      // If the memstore replication is setup, we do not have to wait for observing a flush event<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>      // from primary before starting to serve reads, because gaps from replication is not applicable<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>      return setValue(REGION_REPLICA_WAIT_FOR_PRIMARY_FLUSH_CONF_KEY,<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>              Boolean.toString(memstoreReplication));<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    }<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span><a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>    public ModifyableTableDescriptor setPriority(int priority) {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      return setValue(PRIORITY_KEY, Integer.toString(priority));<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>    }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span><a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>    @Override<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>    public int getPriority() {<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>      return getOrDefault(PRIORITY_KEY, Integer::valueOf, DEFAULT_PRIORITY);<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>    }<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span><a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    /**<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>     * Returns all the column family names of the current table. The map of<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>     * TableDescriptor contains mapping of family name to ColumnFamilyDescriptor.<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>     * This returns all the keys of the family map which represents the column<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>     * family names of the table.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>     *<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>     * @return Immutable sorted set of the keys of the families.<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>     */<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    @Override<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    public Set&lt;byte[]&gt; getColumnFamilyNames() {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>      return Collections.unmodifiableSet(this.families.keySet());<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    }<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span><a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    /**<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>     * Returns the ColumnFamilyDescriptor for a specific column family with name as<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>     * specified by the parameter column.<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>     *<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>     * @param column Column family name<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>     * passed in column.<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>     */<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    @Override<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>    public ColumnFamilyDescriptor getColumnFamily(final byte[] column) {<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>      return this.families.get(column);<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>    }<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span><a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    /**<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>     * Removes the ColumnFamilyDescriptor with name specified by the parameter column<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>     * from the table descriptor<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>     *<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>     * @param column Name of the column family to be removed.<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>     * passed in column.<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>     */<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    public ColumnFamilyDescriptor removeColumnFamily(final byte[] column) {<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>      return this.families.remove(column);<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span><a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>    /**<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>     * loadable or not will be determined when a region is opened.<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>     *<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>     * @param className Full class name.<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>     * @throws IOException<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>     * @return the modifyable TD<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>     */<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>    public ModifyableTableDescriptor setCoprocessor(String className) throws IOException {<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>      return setCoprocessor(<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>        CoprocessorDescriptorBuilder.newBuilder(className).setPriority(Coprocessor.PRIORITY_USER)<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>          .build());<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    }<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span><a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    /**<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>     * loadable or not will be determined when a region is opened.<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>     *<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>     * @throws IOException any illegal parameter key/value<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>     * @return the modifyable TD<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>     */<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>    public ModifyableTableDescriptor setCoprocessor(CoprocessorDescriptor cp)<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>            throws IOException {<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>      checkHasCoprocessor(cp.getClassName());<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      if (cp.getPriority() &lt; 0) {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>        throw new IOException("Priority must be bigger than or equal with zero, current:"<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>          + cp.getPriority());<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>      }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>      // Validate parameter kvs and then add key/values to kvString.<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      StringBuilder kvString = new StringBuilder();<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>      for (Map.Entry&lt;String, String&gt; e : cp.getProperties().entrySet()) {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        if (!e.getKey().matches(CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN)) {<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>          throw new IOException("Illegal parameter key = " + e.getKey());<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>        if (!e.getValue().matches(CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN)) {<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          throw new IOException("Illegal parameter (" + e.getKey()<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>                  + ") value = " + e.getValue());<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>        }<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>        if (kvString.length() != 0) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          kvString.append(',');<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>        kvString.append(e.getKey());<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>        kvString.append('=');<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>        kvString.append(e.getValue());<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>      String value = cp.getJarPath().orElse("")<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>              + "|" + cp.getClassName() + "|" + Integer.toString(cp.getPriority()) + "|"<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>              + kvString.toString();<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      return setCoprocessorToMap(value);<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span><a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    /**<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>     * loadable or not will be determined when a region is opened.<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>     *<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>     * @throws IOException<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>     * @return the modifyable TD<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>     * @deprecated used by HTableDescriptor and admin.rb.<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>     *                       As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>     */<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>    @Deprecated<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    public ModifyableTableDescriptor setCoprocessorWithSpec(final String specStr)<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>      throws IOException {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      CoprocessorDescriptor cpDesc = toCoprocessorDescriptor(specStr).orElseThrow(<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        () -&gt; new IllegalArgumentException(<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>          "Format does not match " + CP_HTD_ATTR_VALUE_PATTERN + ": " + specStr));<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      checkHasCoprocessor(cpDesc.getClassName());<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return setCoprocessorToMap(specStr);<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    }<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span><a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>    private void checkHasCoprocessor(final String className) throws IOException {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      if (hasCoprocessor(className)) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        throw new IOException("Coprocessor " + className + " already exists.");<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      }<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    /**<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>     * Add coprocessor to values Map<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>     * @return Returns &lt;code&gt;this&lt;/code&gt;<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     */<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>    private ModifyableTableDescriptor setCoprocessorToMap(final String specStr) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      if (specStr == null) {<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>        return this;<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>      }<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      // generate a coprocessor key<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      int maxCoprocessorNumber = 0;<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>      Matcher keyMatcher;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values.entrySet()) {<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e.getKey().get()));<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>        if (!keyMatcher.matches()) {<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>          continue;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        }<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        maxCoprocessorNumber = Math.max(Integer.parseInt(keyMatcher.group(1)), maxCoprocessorNumber);<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      maxCoprocessorNumber++;<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      String key = "coprocessor$" + Integer.toString(maxCoprocessorNumber);<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      return setValue(new Bytes(Bytes.toBytes(key)), new Bytes(Bytes.toBytes(specStr)));<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>    }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span><a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>    /**<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>     * Check if the table has an attached co-processor represented by the name<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>     * className<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>     *<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>     * @param classNameToMatch - Class name of the co-processor<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>     * @return true of the table has a co-processor className<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>     */<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>    @Override<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>    public boolean hasCoprocessor(String classNameToMatch) {<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      return getCoprocessorDescriptors().stream().anyMatch(cp -&gt; cp.getClassName()<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        .equals(classNameToMatch));<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span><a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>     * Return the list of attached co-processor represented by their name<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>     * className<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>     *<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>     * @return The list of co-processors classNames<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>     */<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>    @Override<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    public List&lt;CoprocessorDescriptor&gt; getCoprocessorDescriptors() {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      List&lt;CoprocessorDescriptor&gt; result = new ArrayList&lt;&gt;();<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e: getValues().entrySet()) {<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        String key = Bytes.toString(e.getKey().get()).trim();<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>        if (CP_HTD_ATTR_KEY_PATTERN.matcher(key).matches()) {<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>          toCoprocessorDescriptor(Bytes.toString(e.getValue().get()).trim())<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>            .ifPresent(result::add);<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        }<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      return result;<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span><a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    /**<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>     * Remove a coprocessor from those set on the table<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>     *<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>     * @param className Class name of the co-processor<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>     */<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>    public void removeCoprocessor(String className) {<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      Bytes match = null;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      Matcher keyMatcher;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      Matcher valueMatcher;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              .entrySet()) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>                .getKey().get()));<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>        if (!keyMatcher.matches()) {<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          continue;<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        }<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>        valueMatcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(Bytes<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>                .toString(e.getValue().get()));<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>        if (!valueMatcher.matches()) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          continue;<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>        // get className and compare<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>        String clazz = valueMatcher.group(2).trim(); // classname is the 2nd field<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>        // remove the CP if it is present<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>        if (clazz.equals(className.trim())) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>          match = e.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          break;<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      }<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      // if we found a match, remove it<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      if (match != null) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ModifyableTableDescriptor.this.removeValue(match);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>      }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    }<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span><a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    /**<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>     */<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>    @Deprecated<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    public ModifyableTableDescriptor setOwner(User owner) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>      return setOwnerString(owner != null ? owner.getShortName() : null);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span><a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    /**<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     */<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    // used by admin.rb:alter(table_name,*args) to update owner.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>    @Deprecated<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    public ModifyableTableDescriptor setOwnerString(String ownerString) {<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      return setValue(OWNER_KEY, ownerString);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span><a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    /**<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>     */<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    @Override<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    @Deprecated<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    public String getOwnerString() {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      // Note that every table should have an owner (i.e. should have OWNER_KEY set).<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>      // hbase:meta should return system user as owner, not null (see<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>      // MasterFileSystem.java:bootstrap()).<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>      return getOrDefault(OWNER_KEY, Function.identity(), null);<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    }<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span><a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>    /**<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>     * @return the bytes in pb format<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>     */<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    private byte[] toByteArray() {<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>      return ProtobufUtil.prependPBMagic(ProtobufUtil.toTableSchema(this).toByteArray());<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>    /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>     * @param bytes A pb serialized {@link ModifyableTableDescriptor} instance<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>     * with pb magic prefix<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>     * @return An instance of {@link ModifyableTableDescriptor} made from<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>     * &lt;code&gt;bytes&lt;/code&gt;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>     * @throws DeserializationException<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>     * @see #toByteArray()<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>     */<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    private static TableDescriptor parseFrom(final byte[] bytes)<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>            throws DeserializationException {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>      if (!ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        throw new DeserializationException("Expected PB encoded ModifyableTableDescriptor");<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      }<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      HBaseProtos.TableSchema.Builder builder = HBaseProtos.TableSchema.newBuilder();<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      try {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        return ProtobufUtil.toTableDescriptor(builder.build());<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      } catch (IOException e) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        throw new DeserializationException(e);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      }<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>    }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span><a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public int getColumnFamilyCount() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      return families.size();<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  }<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span><a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>  private static Optional&lt;CoprocessorDescriptor&gt; toCoprocessorDescriptor(String spec) {<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>    Matcher matcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(spec);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    if (matcher.matches()) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      // jar file path can be empty if the cp class can be loaded<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>      // from class loader.<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      String path = matcher.group(1).trim().isEmpty() ?<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        null : matcher.group(1).trim();<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      String className = matcher.group(2).trim();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      if (className.isEmpty()) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>        return Optional.empty();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      String priorityStr = matcher.group(3).trim();<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      int priority = priorityStr.isEmpty() ?<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        Coprocessor.PRIORITY_USER : Integer.parseInt(priorityStr);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>      String cfgSpec = null;<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>      try {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>        cfgSpec = matcher.group(4);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>      } catch (IndexOutOfBoundsException ex) {<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>        // ignore<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      }<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      Map&lt;String, String&gt; ourConf = new TreeMap&lt;&gt;();<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      if (cfgSpec != null &amp;&amp; !cfgSpec.trim().equals("|")) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>        cfgSpec = cfgSpec.substring(cfgSpec.indexOf('|') + 1);<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>        Matcher m = CP_HTD_ATTR_VALUE_PARAM_PATTERN.matcher(cfgSpec);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        while (m.find()) {<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>          ourConf.put(m.group(1), m.group(2));<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>        }<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      return Optional.of(CoprocessorDescriptorBuilder.newBuilder(className)<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>        .setJarPath(path)<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        .setPriority(priority)<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>        .setProperties(ourConf)<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        .build());<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>    return Optional.empty();<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  }<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>}<a name="line.1620"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
index d8a909f..2f17833 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/TableDescriptorBuilder.html
@@ -1191,439 +1191,441 @@
 <span class="sourceLineNo">1183</span>          }<a name="line.1183"></a>
 <span class="sourceLineNo">1184</span>          s.append("}");<a name="line.1184"></a>
 <span class="sourceLineNo">1185</span>        }<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>      }<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span><a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>      s.append("}"); // end METHOD<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>      return s;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    }<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span><a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    /**<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>     * Compare the contents of the descriptor with another one passed as a<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>     * parameter. Checks if the obj passed is an instance of ModifyableTableDescriptor,<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>     * if yes then the contents of the descriptors are compared.<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>     *<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>     * @param obj The object to compare<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>     * @return true if the contents of the the two descriptors exactly match<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>     *<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>     * @see java.lang.Object#equals(java.lang.Object)<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>     */<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    @Override<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>    public boolean equals(Object obj) {<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>      if (this == obj) {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>        return true;<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      }<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>      if (obj instanceof ModifyableTableDescriptor) {<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>        return TableDescriptor.COMPARATOR.compare(this, (ModifyableTableDescriptor) obj) == 0;<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>      }<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>      return false;<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    }<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span><a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    /**<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>     * @return hash code<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>     */<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>    @Override<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>    public int hashCode() {<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      int result = this.name.hashCode();<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>      if (this.families.size() &gt; 0) {<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>        for (ColumnFamilyDescriptor e : this.families.values()) {<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>          result ^= e.hashCode();<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>        }<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>      }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      result ^= values.hashCode();<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>      return result;<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>    }<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span><a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>    // Comparable<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>    /**<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>     * Compares the descriptor with another descriptor which is passed as a<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>     * parameter. This compares the content of the two descriptors and not the<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>     * reference.<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>     *<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>     * @param other The MTD to compare<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>     * @return 0 if the contents of the descriptors are exactly matching, 1 if<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>     * there is a mismatch in the contents<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>     */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>    @Override<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>    public int compareTo(final ModifyableTableDescriptor other) {<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      return TableDescriptor.COMPARATOR.compare(this, other);<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>    }<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span><a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>    @Override<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>    public ColumnFamilyDescriptor[] getColumnFamilies() {<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>      return families.values().toArray(new ColumnFamilyDescriptor[families.size()]);<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>    }<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span><a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>    /**<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>     * Returns the configured replicas per region<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>     */<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>    @Override<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    public int getRegionReplication() {<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>      return getOrDefault(REGION_REPLICATION_KEY, Integer::valueOf, DEFAULT_REGION_REPLICATION);<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>     * Sets the number of replicas per region.<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>     *<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>     * @param regionReplication the replication factor per region<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>     * @return the modifyable TD<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>     */<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>    public ModifyableTableDescriptor setRegionReplication(int regionReplication) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>      return setValue(REGION_REPLICATION_KEY, Integer.toString(regionReplication));<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>    }<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span><a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>    /**<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>     * @return true if the read-replicas memstore replication is enabled.<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>     */<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>    @Override<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>    public boolean hasRegionMemStoreReplication() {<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>      return getOrDefault(REGION_MEMSTORE_REPLICATION_KEY, Boolean::valueOf, DEFAULT_REGION_MEMSTORE_REPLICATION);<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>    }<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span><a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>    /**<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>     * Enable or Disable the memstore replication from the primary region to the<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>     * replicas. The replication will be used only for meta operations (e.g.<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>     * flush, compaction, ...)<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>     *<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>     * @param memstoreReplication true if the new data written to the primary<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>     * region should be replicated. false if the secondaries can tollerate to<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>     * have new data only when the primary flushes the memstore.<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>     * @return the modifyable TD<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>     */<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    public ModifyableTableDescriptor setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>      setValue(REGION_MEMSTORE_REPLICATION_KEY, Boolean.toString(memstoreReplication));<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>      // If the memstore replication is setup, we do not have to wait for observing a flush event<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>      // from primary before starting to serve reads, because gaps from replication is not applicable<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>      return setValue(REGION_REPLICA_WAIT_FOR_PRIMARY_FLUSH_CONF_KEY,<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>              Boolean.toString(memstoreReplication));<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>    public ModifyableTableDescriptor setPriority(int priority) {<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>      return setValue(PRIORITY_KEY, Integer.toString(priority));<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>    }<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span><a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    @Override<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>    public int getPriority() {<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>      return getOrDefault(PRIORITY_KEY, Integer::valueOf, DEFAULT_PRIORITY);<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    }<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span><a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>    /**<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>     * Returns all the column family names of the current table. The map of<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>     * TableDescriptor contains mapping of family name to ColumnFamilyDescriptor.<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>     * This returns all the keys of the family map which represents the column<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>     * family names of the table.<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>     *<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>     * @return Immutable sorted set of the keys of the families.<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>     */<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>    @Override<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    public Set&lt;byte[]&gt; getColumnFamilyNames() {<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>      return Collections.unmodifiableSet(this.families.keySet());<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>    /**<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>     * Returns the ColumnFamilyDescriptor for a specific column family with name as<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>     * specified by the parameter column.<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>     *<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>     * @param column Column family name<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>     * passed in column.<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>     */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>    @Override<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>    public ColumnFamilyDescriptor getColumnFamily(final byte[] column) {<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>      return this.families.get(column);<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>    /**<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>     * Removes the ColumnFamilyDescriptor with name specified by the parameter column<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>     * from the table descriptor<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>     *<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>     * @param column Name of the column family to be removed.<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>     * passed in column.<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>     */<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    public ColumnFamilyDescriptor removeColumnFamily(final byte[] column) {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>      return this.families.remove(column);<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    }<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>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>     * loadable or not will be determined when a region is opened.<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>     *<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>     * @param className Full class name.<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>     * @throws IOException<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>     * @return the modifyable TD<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>     */<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>    public ModifyableTableDescriptor setCoprocessor(String className) throws IOException {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      return setCoprocessor(<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>        CoprocessorDescriptorBuilder.newBuilder(className).setPriority(Coprocessor.PRIORITY_USER)<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>          .build());<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    }<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span><a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>    /**<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>     * loadable or not will be determined when a region is opened.<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>     *<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>     * @throws IOException any illegal parameter key/value<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>     * @return the modifyable TD<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>     */<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    public ModifyableTableDescriptor setCoprocessor(CoprocessorDescriptor cp)<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>            throws IOException {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      checkHasCoprocessor(cp.getClassName());<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      if (cp.getPriority() &lt; 0) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>        throw new IOException("Priority must be bigger than or equal with zero, current:"<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          + cp.getPriority());<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>      }<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      // Validate parameter kvs and then add key/values to kvString.<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>      StringBuilder kvString = new StringBuilder();<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      for (Map.Entry&lt;String, String&gt; e : cp.getProperties().entrySet()) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>        if (!e.getKey().matches(CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN)) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          throw new IOException("Illegal parameter key = " + e.getKey());<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>        }<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>        if (!e.getValue().matches(CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN)) {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>          throw new IOException("Illegal parameter (" + e.getKey()<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>                  + ") value = " + e.getValue());<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        }<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>        if (kvString.length() != 0) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>          kvString.append(',');<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>        }<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        kvString.append(e.getKey());<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>        kvString.append('=');<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        kvString.append(e.getValue());<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>      }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span><a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      String value = cp.getJarPath().orElse("")<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>              + "|" + cp.getClassName() + "|" + Integer.toString(cp.getPriority()) + "|"<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>              + kvString.toString();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      return setCoprocessorToMap(value);<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span><a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    /**<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>     * loadable or not will be determined when a region is opened.<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>     *<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>     * @throws IOException<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>     * @return the modifyable TD<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>     * @deprecated used by HTableDescriptor and admin.rb.<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>     *                       As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>     */<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>    @Deprecated<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>    public ModifyableTableDescriptor setCoprocessorWithSpec(final String specStr)<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>      throws IOException {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>      CoprocessorDescriptor cpDesc = toCoprocessorDescriptor(specStr).orElseThrow(<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        () -&gt; new IllegalArgumentException(<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>          "Format does not match " + CP_HTD_ATTR_VALUE_PATTERN + ": " + specStr));<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>      checkHasCoprocessor(cpDesc.getClassName());<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>      return setCoprocessorToMap(specStr);<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    }<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span><a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>    private void checkHasCoprocessor(final String className) throws IOException {<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      if (hasCoprocessor(className)) {<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>        throw new IOException("Coprocessor " + className + " already exists.");<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>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>    /**<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * Add coprocessor to values Map<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>     * @return Returns &lt;code&gt;this&lt;/code&gt;<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>     */<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    private ModifyableTableDescriptor setCoprocessorToMap(final String specStr) {<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      if (specStr == null) {<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>        return this;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      }<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      // generate a coprocessor key<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      int maxCoprocessorNumber = 0;<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>      Matcher keyMatcher;<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values.entrySet()) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e.getKey().get()));<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>        if (!keyMatcher.matches()) {<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>          continue;<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        }<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>        maxCoprocessorNumber = Math.max(Integer.parseInt(keyMatcher.group(1)), maxCoprocessorNumber);<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      }<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      maxCoprocessorNumber++;<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      String key = "coprocessor$" + Integer.toString(maxCoprocessorNumber);<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      return setValue(new Bytes(Bytes.toBytes(key)), new Bytes(Bytes.toBytes(specStr)));<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>    }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span><a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>    /**<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>     * Check if the table has an attached co-processor represented by the name<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>     * className<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>     *<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>     * @param classNameToMatch - Class name of the co-processor<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>     * @return true of the table has a co-processor className<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>     */<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>    @Override<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>    public boolean hasCoprocessor(String classNameToMatch) {<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>      return getCoprocessorDescriptors().stream().anyMatch(cp -&gt; cp.getClassName()<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>        .equals(classNameToMatch));<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>    }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span><a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    /**<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>     * Return the list of attached co-processor represented by their name<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>     * className<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     *<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @return The list of co-processors classNames<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     */<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>    @Override<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>    public List&lt;CoprocessorDescriptor&gt; getCoprocessorDescriptors() {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>      List&lt;CoprocessorDescriptor&gt; result = new ArrayList&lt;&gt;();<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e: getValues().entrySet()) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>        String key = Bytes.toString(e.getKey().get()).trim();<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        if (CP_HTD_ATTR_KEY_PATTERN.matcher(key).matches()) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>          toCoprocessorDescriptor(Bytes.toString(e.getValue().get()).trim())<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>            .ifPresent(result::add);<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        }<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>      }<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      return result;<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>    }<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span><a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    /**<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>     * Remove a coprocessor from those set on the table<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>     *<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>     * @param className Class name of the co-processor<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>     */<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    public void removeCoprocessor(String className) {<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      Bytes match = null;<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>      Matcher keyMatcher;<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      Matcher valueMatcher;<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>              .entrySet()) {<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>                .getKey().get()));<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>        if (!keyMatcher.matches()) {<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          continue;<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>        }<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>        valueMatcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(Bytes<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>                .toString(e.getValue().get()));<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>        if (!valueMatcher.matches()) {<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>          continue;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>        }<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>        // get className and compare<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        String clazz = valueMatcher.group(2).trim(); // classname is the 2nd field<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        // remove the CP if it is present<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        if (clazz.equals(className.trim())) {<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>          match = e.getKey();<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>          break;<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>      }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>      // if we found a match, remove it<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>      if (match != null) {<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        ModifyableTableDescriptor.this.removeValue(match);<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>      }<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>    }<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span><a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>    /**<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>     */<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    @Deprecated<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>    public ModifyableTableDescriptor setOwner(User owner) {<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>      return setOwnerString(owner != null ? owner.getShortName() : null);<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>    }<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span><a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>    /**<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    // used by admin.rb:alter(table_name,*args) to update owner.<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>    @Deprecated<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>    public ModifyableTableDescriptor setOwnerString(String ownerString) {<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return setValue(OWNER_KEY, ownerString);<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>    }<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span><a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>    /**<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     */<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>    @Override<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    @Deprecated<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>    public String getOwnerString() {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      // Note that every table should have an owner (i.e. should have OWNER_KEY set).<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      // hbase:meta should return system user as owner, not null (see<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>      // MasterFileSystem.java:bootstrap()).<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>      return getOrDefault(OWNER_KEY, Function.identity(), null);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>    }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span><a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>    /**<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>     * @return the bytes in pb format<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>     */<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>    private byte[] toByteArray() {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>      return ProtobufUtil.prependPBMagic(ProtobufUtil.toTableSchema(this).toByteArray());<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>    }<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span><a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>    /**<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>     * @param bytes A pb serialized {@link ModifyableTableDescriptor} instance<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>     * with pb magic prefix<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>     * @return An instance of {@link ModifyableTableDescriptor} made from<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>     * &lt;code&gt;bytes&lt;/code&gt;<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>     * @throws DeserializationException<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>     * @see #toByteArray()<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>     */<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>    private static TableDescriptor parseFrom(final byte[] bytes)<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>            throws DeserializationException {<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      if (!ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>        throw new DeserializationException("Expected PB encoded ModifyableTableDescriptor");<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      HBaseProtos.TableSchema.Builder builder = HBaseProtos.TableSchema.newBuilder();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      try {<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>        return ProtobufUtil.toTableDescriptor(builder.build());<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      } catch (IOException e) {<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>        throw new DeserializationException(e);<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>      }<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>    }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>    @Override<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>    public int getColumnFamilyCount() {<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      return families.size();<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>    }<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>  }<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span><a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>  private static Optional&lt;CoprocessorDescriptor&gt; toCoprocessorDescriptor(String spec) {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    Matcher matcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(spec);<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>    if (matcher.matches()) {<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      // jar file path can be empty if the cp class can be loaded<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      // from class loader.<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      String path = matcher.group(1).trim().isEmpty() ?<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>        null : matcher.group(1).trim();<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      String className = matcher.group(2).trim();<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>      if (className.isEmpty()) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>        return Optional.empty();<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      String priorityStr = matcher.group(3).trim();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      int priority = priorityStr.isEmpty() ?<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>        Coprocessor.PRIORITY_USER : Integer.parseInt(priorityStr);<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      String cfgSpec = null;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      try {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        cfgSpec = matcher.group(4);<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>      } catch (IndexOutOfBoundsException ex) {<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>        // ignore<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>      Map&lt;String, String&gt; ourConf = new TreeMap&lt;&gt;();<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      if (cfgSpec != null &amp;&amp; !cfgSpec.trim().equals("|")) {<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>        cfgSpec = cfgSpec.substring(cfgSpec.indexOf('|') + 1);<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>        Matcher m = CP_HTD_ATTR_VALUE_PARAM_PATTERN.matcher(cfgSpec);<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>        while (m.find()) {<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>          ourConf.put(m.group(1), m.group(2));<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      return Optional.of(CoprocessorDescriptorBuilder.newBuilder(className)<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        .setJarPath(path)<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        .setPriority(priority)<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        .setProperties(ourConf)<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>        .build());<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>    }<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    return Optional.empty();<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>}<a name="line.1618"></a>
+<span class="sourceLineNo">1186</span><a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>        s.append("}");<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>      }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>      s.append("}"); // end METHOD<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>      return s;<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>    }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>    /**<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>     * Compare the contents of the descriptor with another one passed as a<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>     * parameter. Checks if the obj passed is an instance of ModifyableTableDescriptor,<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>     * if yes then the contents of the descriptors are compared.<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>     *<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>     * @param obj The object to compare<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>     * @return true if the contents of the the two descriptors exactly match<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>     *<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>     * @see java.lang.Object#equals(java.lang.Object)<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>     */<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>    @Override<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>    public boolean equals(Object obj) {<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>      if (this == obj) {<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>        return true;<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>      }<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>      if (obj instanceof ModifyableTableDescriptor) {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>        return TableDescriptor.COMPARATOR.compare(this, (ModifyableTableDescriptor) obj) == 0;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>      }<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      return false;<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    }<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span><a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>    /**<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>     * @return hash code<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>     */<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    @Override<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>    public int hashCode() {<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>      int result = this.name.hashCode();<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>      if (this.families.size() &gt; 0) {<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>        for (ColumnFamilyDescriptor e : this.families.values()) {<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>          result ^= e.hashCode();<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>        }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>      }<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      result ^= values.hashCode();<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      return result;<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>    }<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span><a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>    // Comparable<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    /**<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>     * Compares the descriptor with another descriptor which is passed as a<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>     * parameter. This compares the content of the two descriptors and not the<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>     * reference.<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>     *<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>     * @param other The MTD to compare<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>     * @return 0 if the contents of the descriptors are exactly matching, 1 if<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>     * there is a mismatch in the contents<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>     */<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>    @Override<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>    public int compareTo(final ModifyableTableDescriptor other) {<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      return TableDescriptor.COMPARATOR.compare(this, other);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    }<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span><a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>    @Override<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>    public ColumnFamilyDescriptor[] getColumnFamilies() {<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>      return families.values().toArray(new ColumnFamilyDescriptor[families.size()]);<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>    }<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 the configured replicas per region<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>     */<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    @Override<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    public int getRegionReplication() {<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      return getOrDefault(REGION_REPLICATION_KEY, Integer::valueOf, DEFAULT_REGION_REPLICATION);<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>    }<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span><a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    /**<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>     * Sets the number of replicas per region.<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>     *<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>     * @param regionReplication the replication factor per region<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>     * @return the modifyable TD<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>     */<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>    public ModifyableTableDescriptor setRegionReplication(int regionReplication) {<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>      return setValue(REGION_REPLICATION_KEY, Integer.toString(regionReplication));<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>    }<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span><a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>    /**<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>     * @return true if the read-replicas memstore replication is enabled.<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>     */<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>    @Override<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>    public boolean hasRegionMemStoreReplication() {<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      return getOrDefault(REGION_MEMSTORE_REPLICATION_KEY, Boolean::valueOf, DEFAULT_REGION_MEMSTORE_REPLICATION);<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>    }<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span><a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>    /**<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>     * Enable or Disable the memstore replication from the primary region to the<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>     * replicas. The replication will be used only for meta operations (e.g.<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>     * flush, compaction, ...)<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>     *<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>     * @param memstoreReplication true if the new data written to the primary<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>     * region should be replicated. false if the secondaries can tollerate to<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>     * have new data only when the primary flushes the memstore.<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>     * @return the modifyable TD<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>     */<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span>    public ModifyableTableDescriptor setRegionMemStoreReplication(boolean memstoreReplication) {<a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>      setValue(REGION_MEMSTORE_REPLICATION_KEY, Boolean.toString(memstoreReplication));<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>      // If the memstore replication is setup, we do not have to wait for observing a flush event<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>      // from primary before starting to serve reads, because gaps from replication is not applicable<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>      return setValue(REGION_REPLICA_WAIT_FOR_PRIMARY_FLUSH_CONF_KEY,<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>              Boolean.toString(memstoreReplication));<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    }<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span><a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>    public ModifyableTableDescriptor setPriority(int priority) {<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>      return setValue(PRIORITY_KEY, Integer.toString(priority));<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>    }<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span><a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>    @Override<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>    public int getPriority() {<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>      return getOrDefault(PRIORITY_KEY, Integer::valueOf, DEFAULT_PRIORITY);<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>    }<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span><a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    /**<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>     * Returns all the column family names of the current table. The map of<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>     * TableDescriptor contains mapping of family name to ColumnFamilyDescriptor.<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>     * This returns all the keys of the family map which represents the column<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>     * family names of the table.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>     *<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>     * @return Immutable sorted set of the keys of the families.<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>     */<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>    @Override<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>    public Set&lt;byte[]&gt; getColumnFamilyNames() {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>      return Collections.unmodifiableSet(this.families.keySet());<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    }<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span><a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    /**<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>     * Returns the ColumnFamilyDescriptor for a specific column family with name as<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>     * specified by the parameter column.<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span>     *<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>     * @param column Column family name<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>     * passed in column.<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>     */<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    @Override<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>    public ColumnFamilyDescriptor getColumnFamily(final byte[] column) {<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>      return this.families.get(column);<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>    }<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span><a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    /**<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>     * Removes the ColumnFamilyDescriptor with name specified by the parameter column<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>     * from the table descriptor<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>     *<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>     * @param column Name of the column family to be removed.<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>     * @return Column descriptor for the passed family name or the family on<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>     * passed in column.<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>     */<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    public ColumnFamilyDescriptor removeColumnFamily(final byte[] column) {<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>      return this.families.remove(column);<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span><a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>    /**<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>     * loadable or not will be determined when a region is opened.<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>     *<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>     * @param className Full class name.<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>     * @throws IOException<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>     * @return the modifyable TD<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>     */<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>    public ModifyableTableDescriptor setCoprocessor(String className) throws IOException {<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>      return setCoprocessor(<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>        CoprocessorDescriptorBuilder.newBuilder(className).setPriority(Coprocessor.PRIORITY_USER)<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>          .build());<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    }<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span><a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    /**<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>     * loadable or not will be determined when a region is opened.<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>     *<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>     * @throws IOException any illegal parameter key/value<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>     * @return the modifyable TD<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>     */<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>    public ModifyableTableDescriptor setCoprocessor(CoprocessorDescriptor cp)<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>            throws IOException {<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>      checkHasCoprocessor(cp.getClassName());<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>      if (cp.getPriority() &lt; 0) {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>        throw new IOException("Priority must be bigger than or equal with zero, current:"<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>          + cp.getPriority());<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>      }<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>      // Validate parameter kvs and then add key/values to kvString.<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      StringBuilder kvString = new StringBuilder();<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>      for (Map.Entry&lt;String, String&gt; e : cp.getProperties().entrySet()) {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        if (!e.getKey().matches(CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN)) {<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>          throw new IOException("Illegal parameter key = " + e.getKey());<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>        if (!e.getValue().matches(CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN)) {<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          throw new IOException("Illegal parameter (" + e.getKey()<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>                  + ") value = " + e.getValue());<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>        }<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>        if (kvString.length() != 0) {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          kvString.append(',');<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>        kvString.append(e.getKey());<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>        kvString.append('=');<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>        kvString.append(e.getValue());<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>      String value = cp.getJarPath().orElse("")<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>              + "|" + cp.getClassName() + "|" + Integer.toString(cp.getPriority()) + "|"<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>              + kvString.toString();<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      return setCoprocessorToMap(value);<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    }<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span><a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    /**<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>     * Add a table coprocessor to this table. The coprocessor type must be<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>     * org.apache.hadoop.hbase.coprocessor.RegionObserver or Endpoint. It won't<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>     * check if the class can be loaded or not. Whether a coprocessor is<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>     * loadable or not will be determined when a region is opened.<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>     *<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>     * @throws IOException<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>     * @return the modifyable TD<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>     * @deprecated used by HTableDescriptor and admin.rb.<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>     *                       As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>     */<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>    @Deprecated<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>    public ModifyableTableDescriptor setCoprocessorWithSpec(final String specStr)<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>      throws IOException {<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      CoprocessorDescriptor cpDesc = toCoprocessorDescriptor(specStr).orElseThrow(<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        () -&gt; new IllegalArgumentException(<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>          "Format does not match " + CP_HTD_ATTR_VALUE_PATTERN + ": " + specStr));<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      checkHasCoprocessor(cpDesc.getClassName());<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>      return setCoprocessorToMap(specStr);<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>    }<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span><a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>    private void checkHasCoprocessor(final String className) throws IOException {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      if (hasCoprocessor(className)) {<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        throw new IOException("Coprocessor " + className + " already exists.");<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>      }<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>    /**<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>     * Add coprocessor to values Map<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>     * @param specStr The Coprocessor specification all in in one String<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>     * @return Returns &lt;code&gt;this&lt;/code&gt;<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     */<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>    private ModifyableTableDescriptor setCoprocessorToMap(final String specStr) {<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>      if (specStr == null) {<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>        return this;<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>      }<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      // generate a coprocessor key<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>      int maxCoprocessorNumber = 0;<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>      Matcher keyMatcher;<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values.entrySet()) {<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e.getKey().get()));<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>        if (!keyMatcher.matches()) {<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>          continue;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>        }<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>        maxCoprocessorNumber = Math.max(Integer.parseInt(keyMatcher.group(1)), maxCoprocessorNumber);<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      maxCoprocessorNumber++;<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      String key = "coprocessor$" + Integer.toString(maxCoprocessorNumber);<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>      return setValue(new Bytes(Bytes.toBytes(key)), new Bytes(Bytes.toBytes(specStr)));<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>    }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span><a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>    /**<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>     * Check if the table has an attached co-processor represented by the name<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>     * className<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>     *<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>     * @param classNameToMatch - Class name of the co-processor<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>     * @return true of the table has a co-processor className<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>     */<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>    @Override<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>    public boolean hasCoprocessor(String classNameToMatch) {<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      return getCoprocessorDescriptors().stream().anyMatch(cp -&gt; cp.getClassName()<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>        .equals(classNameToMatch));<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span><a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>     * Return the list of attached co-processor represented by their name<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>     * className<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>     *<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>     * @return The list of co-processors classNames<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>     */<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>    @Override<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    public List&lt;CoprocessorDescriptor&gt; getCoprocessorDescriptors() {<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>      List&lt;CoprocessorDescriptor&gt; result = new ArrayList&lt;&gt;();<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e: getValues().entrySet()) {<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        String key = Bytes.toString(e.getKey().get()).trim();<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>        if (CP_HTD_ATTR_KEY_PATTERN.matcher(key).matches()) {<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>          toCoprocessorDescriptor(Bytes.toString(e.getValue().get()).trim())<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>            .ifPresent(result::add);<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>        }<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      }<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      return result;<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span><a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>    /**<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>     * Remove a coprocessor from those set on the table<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>     *<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>     * @param className Class name of the co-processor<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>     */<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>    public void removeCoprocessor(String className) {<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      Bytes match = null;<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>      Matcher keyMatcher;<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      Matcher valueMatcher;<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      for (Map.Entry&lt;Bytes, Bytes&gt; e : this.values<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>              .entrySet()) {<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>        keyMatcher = CP_HTD_ATTR_KEY_PATTERN.matcher(Bytes.toString(e<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>                .getKey().get()));<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>        if (!keyMatcher.matches()) {<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          continue;<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>        }<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>        valueMatcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(Bytes<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>                .toString(e.getValue().get()));<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>        if (!valueMatcher.matches()) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          continue;<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>        // get className and compare<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>        String clazz = valueMatcher.group(2).trim(); // classname is the 2nd field<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>        // remove the CP if it is present<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>        if (clazz.equals(className.trim())) {<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>          match = e.getKey();<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          break;<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>      }<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      // if we found a match, remove it<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      if (match != null) {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>        ModifyableTableDescriptor.this.removeValue(match);<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>      }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>    }<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span><a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>    /**<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>     */<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>    @Deprecated<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>    public ModifyableTableDescriptor setOwner(User owner) {<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>      return setOwnerString(owner != null ? owner.getShortName() : null);<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>    }<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span><a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    /**<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     */<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>    // used by admin.rb:alter(table_name,*args) to update owner.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>    @Deprecated<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>    public ModifyableTableDescriptor setOwnerString(String ownerString) {<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>      return setValue(OWNER_KEY, ownerString);<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>    }<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span><a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>    /**<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>     * @deprecated since 2.0.0 and will be removed in 3.0.0.<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>     * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-15583"&gt;HBASE-15583&lt;/a&gt;<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>     */<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    @Override<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>    @Deprecated<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    public String getOwnerString() {<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>      // Note that every table should have an owner (i.e. should have OWNER_KEY set).<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>      // hbase:meta should return system user as owner, not null (see<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>      // MasterFileSystem.java:bootstrap()).<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>      return getOrDefault(OWNER_KEY, Function.identity(), null);<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>    }<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span><a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>    /**<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>     * @return the bytes in pb format<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>     */<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    private byte[] toByteArray() {<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>      return ProtobufUtil.prependPBMagic(ProtobufUtil.toTableSchema(this).toByteArray());<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>    }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span><a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>    /**<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>     * @param bytes A pb serialized {@link ModifyableTableDescriptor} instance<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>     * with pb magic prefix<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>     * @return An instance of {@link ModifyableTableDescriptor} made from<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>     * &lt;code&gt;bytes&lt;/code&gt;<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>     * @throws DeserializationException<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>     * @see #toByteArray()<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>     */<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>    private static TableDescriptor parseFrom(final byte[] bytes)<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>            throws DeserializationException {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>      if (!ProtobufUtil.isPBMagicPrefix(bytes)) {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>        throw new DeserializationException("Expected PB encoded ModifyableTableDescriptor");<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      }<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>      int pblen = ProtobufUtil.lengthOfPBMagic();<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      HBaseProtos.TableSchema.Builder builder = HBaseProtos.TableSchema.newBuilder();<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      try {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>        ProtobufUtil.mergeFrom(builder, bytes, pblen, bytes.length - pblen);<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        return ProtobufUtil.toTableDescriptor(builder.build());<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      } catch (IOException e) {<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        throw new DeserializationException(e);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>      }<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>    }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span><a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    @Override<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>    public int getColumnFamilyCount() {<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>      return families.size();<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>    }<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  }<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span><a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>  private static Optional&lt;CoprocessorDescriptor&gt; toCoprocessorDescriptor(String spec) {<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>    Matcher matcher = CP_HTD_ATTR_VALUE_PATTERN.matcher(spec);<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>    if (matcher.matches()) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      // jar file path can be empty if the cp class can be loaded<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>      // from class loader.<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      String path = matcher.group(1).trim().isEmpty() ?<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>        null : matcher.group(1).trim();<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      String className = matcher.group(2).trim();<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      if (className.isEmpty()) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>        return Optional.empty();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      }<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      String priorityStr = matcher.group(3).trim();<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      int priority = priorityStr.isEmpty() ?<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        Coprocessor.PRIORITY_USER : Integer.parseInt(priorityStr);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>      String cfgSpec = null;<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>      try {<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>        cfgSpec = matcher.group(4);<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>      } catch (IndexOutOfBoundsException ex) {<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>        // ignore<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      }<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      Map&lt;String, String&gt; ourConf = new TreeMap&lt;&gt;();<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      if (cfgSpec != null &amp;&amp; !cfgSpec.trim().equals("|")) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>        cfgSpec = cfgSpec.substring(cfgSpec.indexOf('|') + 1);<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>        Matcher m = CP_HTD_ATTR_VALUE_PARAM_PATTERN.matcher(cfgSpec);<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        while (m.find()) {<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>          ourConf.put(m.group(1), m.group(2));<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>        }<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>      return Optional.of(CoprocessorDescriptorBuilder.newBuilder(className)<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>        .setJarPath(path)<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        .setPriority(priority)<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>        .setProperties(ourConf)<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        .build());<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>    }<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>    return Optional.empty();<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>  }<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>}<a name="line.1620"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
index 40b29fc..ee1b0b8 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/CacheConfig.html
@@ -89,309 +89,332 @@
 <span class="sourceLineNo">081</span>   */<a name="line.81"></a>
 <span class="sourceLineNo">082</span>  public static final String PREFETCH_BLOCKS_ON_OPEN_KEY = "hbase.rs.prefetchblocksonopen";<a name="line.82"></a>
 <span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  public static final String DROP_BEHIND_CACHE_COMPACTION_KEY =<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      "hbase.hfile.drop.behind.compaction";<a name="line.85"></a>
-<span class="sourceLineNo">086</span><a name="line.86"></a>
-<span class="sourceLineNo">087</span>  // Defaults<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public static final boolean DEFAULT_CACHE_DATA_ON_READ = true;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  public static final boolean DEFAULT_CACHE_DATA_ON_WRITE = false;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public static final boolean DEFAULT_IN_MEMORY = false;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public static final boolean DEFAULT_CACHE_INDEXES_ON_WRITE = false;<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  public static final boolean DEFAULT_CACHE_BLOOMS_ON_WRITE = false;<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public static final boolean DEFAULT_EVICT_ON_CLOSE = false;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  public static final boolean DEFAULT_CACHE_DATA_COMPRESSED = false;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  public static final boolean DEFAULT_PREFETCH_ON_OPEN = false;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public static final boolean DROP_BEHIND_CACHE_COMPACTION_DEFAULT = true;<a name="line.96"></a>
-<span class="sourceLineNo">097</span><a name="line.97"></a>
-<span class="sourceLineNo">098</span>  /**<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * Whether blocks should be cached on read (default is on if there is a<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   * cache but this can be turned off on a per-family or per-request basis).<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   * If off we will STILL cache meta blocks; i.e. INDEX and BLOOM types.<a name="line.101"></a>
-<span class="sourceLineNo">102</span>   * This cannot be disabled.<a name="line.102"></a>
-<span class="sourceLineNo">103</span>   */<a name="line.103"></a>
-<span class="sourceLineNo">104</span>  private final boolean cacheDataOnRead;<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  /** Whether blocks should be flagged as in-memory when being cached */<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  private final boolean inMemory;<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  /** Whether data blocks should be cached when new files are written */<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  private boolean cacheDataOnWrite;<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /** Whether index blocks should be cached when new files are written */<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  private final boolean cacheIndexesOnWrite;<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>  /** Whether compound bloom filter blocks should be cached on write */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private final boolean cacheBloomsOnWrite;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  /** Whether blocks of a file should be evicted when the file is closed */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  private boolean evictOnClose;<a name="line.119"></a>
-<span class="sourceLineNo">120</span><a name="line.120"></a>
-<span class="sourceLineNo">121</span>  /** Whether data blocks should be stored in compressed and/or encrypted form in the cache */<a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private final boolean cacheDataCompressed;<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>  /** Whether data blocks should be prefetched into the cache */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private final boolean prefetchOnOpen;<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  private final boolean dropBehindCompaction;<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>  // Local reference to the block cache<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private final BlockCache blockCache;<a name="line.130"></a>
-<span class="sourceLineNo">131</span><a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private final ByteBuffAllocator byteBuffAllocator;<a name="line.132"></a>
+<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * Configuration key to cache blocks when a compacted file is written<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
+<span class="sourceLineNo">087</span>  public static final String CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY =<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      "hbase.rs.cachecompactedblocksonwrite";<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public static final String DROP_BEHIND_CACHE_COMPACTION_KEY =<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      "hbase.hfile.drop.behind.compaction";<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>  // Defaults<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  public static final boolean DEFAULT_CACHE_DATA_ON_READ = true;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public static final boolean DEFAULT_CACHE_DATA_ON_WRITE = false;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public static final boolean DEFAULT_IN_MEMORY = false;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  public static final boolean DEFAULT_CACHE_INDEXES_ON_WRITE = false;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public static final boolean DEFAULT_CACHE_BLOOMS_ON_WRITE = false;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>  public static final boolean DEFAULT_EVICT_ON_CLOSE = false;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>  public static final boolean DEFAULT_CACHE_DATA_COMPRESSED = false;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public static final boolean DEFAULT_PREFETCH_ON_OPEN = false;<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public static final boolean DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE = false;<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public static final boolean DROP_BEHIND_CACHE_COMPACTION_DEFAULT = true;<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  /**<a name="line.105"></a>
+<span class="sourceLineNo">106</span>   * Whether blocks should be cached on read (default is on if there is a<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * cache but this can be turned off on a per-family or per-request basis).<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * If off we will STILL cache meta blocks; i.e. INDEX and BLOOM types.<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * This cannot be disabled.<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   */<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  private final boolean cacheDataOnRead;<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  /** Whether blocks should be flagged as in-memory when being cached */<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private final boolean inMemory;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>  /** Whether data blocks should be cached when new files are written */<a name="line.116"></a>
+<span class="sourceLineNo">117</span>  private boolean cacheDataOnWrite;<a name="line.117"></a>
+<span class="sourceLineNo">118</span><a name="line.118"></a>
+<span class="sourceLineNo">119</span>  /** Whether index blocks should be cached when new files are written */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  private final boolean cacheIndexesOnWrite;<a name="line.120"></a>
+<span class="sourceLineNo">121</span><a name="line.121"></a>
+<span class="sourceLineNo">122</span>  /** Whether compound bloom filter blocks should be cached on write */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private final boolean cacheBloomsOnWrite;<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  /** Whether blocks of a file should be evicted when the file is closed */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private boolean evictOnClose;<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  /** Whether data blocks should be stored in compressed and/or encrypted form in the cache */<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  private final boolean cacheDataCompressed;<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  /** Whether data blocks should be prefetched into the cache */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  private final boolean prefetchOnOpen;<a name="line.132"></a>
 <span class="sourceLineNo">133</span><a name="line.133"></a>
 <span class="sourceLineNo">134</span>  /**<a name="line.134"></a>
-<span class="sourceLineNo">135</span>   * Create a cache configuration using the specified configuration object and<a name="line.135"></a>
-<span class="sourceLineNo">136</span>   * defaults for family level settings. Only use if no column family context.<a name="line.136"></a>
-<span class="sourceLineNo">137</span>   * @param conf hbase configuration<a name="line.137"></a>
-<span class="sourceLineNo">138</span>   */<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  public CacheConfig(Configuration conf) {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    this(conf, null);<a name="line.140"></a>
-<span class="sourceLineNo">141</span>  }<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public CacheConfig(Configuration conf, BlockCache blockCache) {<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    this(conf, null, blockCache, ByteBuffAllocator.HEAP);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>  }<a name="line.145"></a>
-<span class="sourceLineNo">146</span><a name="line.146"></a>
-<span class="sourceLineNo">147</span>  /**<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   * Create a cache configuration using the specified configuration object and<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * family descriptor.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @param conf hbase configuration<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @param family column family configuration<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  public CacheConfig(Configuration conf, ColumnFamilyDescriptor family, BlockCache blockCache,<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      ByteBuffAllocator byteBuffAllocator) {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    this.cacheDataOnRead = conf.getBoolean(CACHE_DATA_ON_READ_KEY, DEFAULT_CACHE_DATA_ON_READ) &amp;&amp;<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        (family == null ? true : family.isBlockCacheEnabled());<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    this.inMemory = family == null ? DEFAULT_IN_MEMORY : family.isInMemory();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    this.cacheDataCompressed =<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        conf.getBoolean(CACHE_DATA_BLOCKS_COMPRESSED_KEY, DEFAULT_CACHE_DATA_COMPRESSED);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    this.dropBehindCompaction =<a name="line.160"></a>
-<span class="sourceLineNo">161</span>        conf.getBoolean(DROP_BEHIND_CACHE_COMPACTION_KEY, DROP_BEHIND_CACHE_COMPACTION_DEFAULT);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // For the following flags we enable them regardless of per-schema settings<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    // if they are enabled in the global configuration.<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    this.cacheDataOnWrite =<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        conf.getBoolean(CACHE_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_DATA_ON_WRITE) ||<a name="line.165"></a>
-<span class="sourceLineNo">166</span>            (family == null ? false : family.isCacheDataOnWrite());<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    this.cacheIndexesOnWrite =<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        conf.getBoolean(CACHE_INDEX_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_INDEXES_ON_WRITE) ||<a name="line.168"></a>
-<span class="sourceLineNo">169</span>            (family == null ? false : family.isCacheIndexesOnWrite());<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    this.cacheBloomsOnWrite =<a name="line.170"></a>
-<span class="sourceLineNo">171</span>        conf.getBoolean(CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_BLOOMS_ON_WRITE) ||<a name="line.171"></a>
-<span class="sourceLineNo">172</span>            (family == null ? false : family.isCacheBloomsOnWrite());<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    this.evictOnClose = conf.getBoolean(EVICT_BLOCKS_ON_CLOSE_KEY, DEFAULT_EVICT_ON_CLOSE) ||<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        (family == null ? false : family.isEvictBlocksOnClose());<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    this.prefetchOnOpen = conf.getBoolean(PREFETCH_BLOCKS_ON_OPEN_KEY, DEFAULT_PREFETCH_ON_OPEN) ||<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        (family == null ? false : family.isPrefetchBlocksOnOpen());<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    this.blockCache = blockCache;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    this.byteBuffAllocator = byteBuffAllocator;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    LOG.info("Created cacheConfig: " + this + (family == null ? "" : " for family " + family) +<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        " with blockCache=" + blockCache);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  }<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  /**<a name="line.183"></a>
-<span class="sourceLineNo">184</span>   * Constructs a cache configuration copied from the specified configuration.<a name="line.184"></a>
-<span class="sourceLineNo">185</span>   * @param cacheConf<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   */<a name="line.186"></a>
-<span class="sourceLineNo">187</span>  public CacheConfig(CacheConfig cacheConf) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>    this.cacheDataOnRead = cacheConf.cacheDataOnRead;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>    this.inMemory = cacheConf.inMemory;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    this.cacheDataOnWrite = cacheConf.cacheDataOnWrite;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    this.cacheIndexesOnWrite = cacheConf.cacheIndexesOnWrite;<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    this.cacheBloomsOnWrite = cacheConf.cacheBloomsOnWrite;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    this.evictOnClose = cacheConf.evictOnClose;<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    this.cacheDataCompressed = cacheConf.cacheDataCompressed;<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    this.prefetchOnOpen = cacheConf.prefetchOnOpen;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    this.dropBehindCompaction = cacheConf.dropBehindCompaction;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    this.blockCache = cacheConf.blockCache;<a name="line.197"></a>
-<span class="sourceLineNo">198</span>    this.byteBuffAllocator = cacheConf.byteBuffAllocator;<a name="line.198"></a>
-<span class="sourceLineNo">199</span>  }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>  private CacheConfig() {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>    this.cacheDataOnRead = false;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    this.inMemory = false;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    this.cacheDataOnWrite = false;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    this.cacheIndexesOnWrite = false;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    this.cacheBloomsOnWrite = false;<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    this.evictOnClose = false;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    this.cacheDataCompressed = false;<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    this.prefetchOnOpen = false;<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    this.dropBehindCompaction = false;<a name="line.210"></a>
-<span class="sourceLineNo">211</span>    this.blockCache = null;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    this.byteBuffAllocator = ByteBuffAllocator.HEAP;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  }<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Returns whether the DATA blocks of this HFile should be cached on read or not (we always<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   * cache the meta blocks, the INDEX and BLOOM blocks).<a name="line.217"></a>
-<span class="sourceLineNo">218</span>   * @return true if blocks should be cached on read, false if not<a name="line.218"></a>
-<span class="sourceLineNo">219</span>   */<a name="line.219"></a>
-<span class="sourceLineNo">220</span>  public boolean shouldCacheDataOnRead() {<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    return cacheDataOnRead;<a name="line.221"></a>
-<span class="sourceLineNo">222</span>  }<a name="line.222"></a>
-<span class="sourceLineNo">223</span><a name="line.223"></a>
-<span class="sourceLineNo">224</span>  public boolean shouldDropBehindCompaction() {<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    return dropBehindCompaction;<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>  /**<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * Should we cache a block of a particular category? We always cache<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * important blocks such as index blocks, as long as the block cache is<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * available.<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  public boolean shouldCacheBlockOnRead(BlockCategory category) {<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    return cacheDataOnRead || category == BlockCategory.INDEX || category == BlockCategory.BLOOM ||<a name="line.234"></a>
-<span class="sourceLineNo">235</span>        (prefetchOnOpen &amp;&amp; (category != BlockCategory.META &amp;&amp; category != BlockCategory.UNKNOWN));<a name="line.235"></a>
-<span class="sourceLineNo">236</span>  }<a name="line.236"></a>
-<span class="sourceLineNo">237</span><a name="line.237"></a>
-<span class="sourceLineNo">238</span>  /**<a name="line.238"></a>
-<span class="sourceLineNo">239</span>   * @return true if blocks in this file should be flagged as in-memory<a name="line.239"></a>
-<span class="sourceLineNo">240</span>   */<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  public boolean isInMemory() {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    return this.inMemory;<a name="line.242"></a>
-<span class="sourceLineNo">243</span>  }<a name="line.243"></a>
-<span class="sourceLineNo">244</span><a name="line.244"></a>
-<span class="sourceLineNo">245</span>  /**<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * @return true if data blocks should be written to the cache when an HFile is<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   *         written, false if not<a name="line.247"></a>
+<span class="sourceLineNo">135</span>   * Whether data blocks should be cached when compacted file is written<a name="line.135"></a>
+<span class="sourceLineNo">136</span>   */<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  private final boolean cacheCompactedDataOnWrite;<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  private final boolean dropBehindCompaction;<a name="line.139"></a>
+<span class="sourceLineNo">140</span><a name="line.140"></a>
+<span class="sourceLineNo">141</span>  // Local reference to the block cache<a name="line.141"></a>
+<span class="sourceLineNo">142</span>  private final BlockCache blockCache;<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  private final ByteBuffAllocator byteBuffAllocator;<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  /**<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * Create a cache configuration using the specified configuration object and<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * defaults for family level settings. Only use if no column family context.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @param conf hbase configuration<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  public CacheConfig(Configuration conf) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    this(conf, null);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  public CacheConfig(Configuration conf, BlockCache blockCache) {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    this(conf, null, blockCache, ByteBuffAllocator.HEAP);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Create a cache configuration using the specified configuration object and<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * family descriptor.<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * @param conf hbase configuration<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param family column family configuration<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   */<a name="line.164"></a>
+<span class="sourceLineNo">165</span>  public CacheConfig(Configuration conf, ColumnFamilyDescriptor family, BlockCache blockCache,<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      ByteBuffAllocator byteBuffAllocator) {<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    this.cacheDataOnRead = conf.getBoolean(CACHE_DATA_ON_READ_KEY, DEFAULT_CACHE_DATA_ON_READ) &amp;&amp;<a name="line.167"></a>
+<span class="sourceLineNo">168</span>        (family == null ? true : family.isBlockCacheEnabled());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    this.inMemory = family == null ? DEFAULT_IN_MEMORY : family.isInMemory();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    this.cacheDataCompressed =<a name="line.170"></a>
+<span class="sourceLineNo">171</span>        conf.getBoolean(CACHE_DATA_BLOCKS_COMPRESSED_KEY, DEFAULT_CACHE_DATA_COMPRESSED);<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    this.dropBehindCompaction =<a name="line.172"></a>
+<span class="sourceLineNo">173</span>        conf.getBoolean(DROP_BEHIND_CACHE_COMPACTION_KEY, DROP_BEHIND_CACHE_COMPACTION_DEFAULT);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    // For the following flags we enable them regardless of per-schema settings<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // if they are enabled in the global configuration.<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    this.cacheDataOnWrite =<a name="line.176"></a>
+<span class="sourceLineNo">177</span>        conf.getBoolean(CACHE_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_DATA_ON_WRITE) ||<a name="line.177"></a>
+<span class="sourceLineNo">178</span>            (family == null ? false : family.isCacheDataOnWrite());<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    this.cacheIndexesOnWrite =<a name="line.179"></a>
+<span class="sourceLineNo">180</span>        conf.getBoolean(CACHE_INDEX_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_INDEXES_ON_WRITE) ||<a name="line.180"></a>
+<span class="sourceLineNo">181</span>            (family == null ? false : family.isCacheIndexesOnWrite());<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    this.cacheBloomsOnWrite =<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        conf.getBoolean(CACHE_BLOOM_BLOCKS_ON_WRITE_KEY, DEFAULT_CACHE_BLOOMS_ON_WRITE) ||<a name="line.183"></a>
+<span class="sourceLineNo">184</span>            (family == null ? false : family.isCacheBloomsOnWrite());<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    this.evictOnClose = conf.getBoolean(EVICT_BLOCKS_ON_CLOSE_KEY, DEFAULT_EVICT_ON_CLOSE) ||<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        (family == null ? false : family.isEvictBlocksOnClose());<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    this.prefetchOnOpen = conf.getBoolean(PREFETCH_BLOCKS_ON_OPEN_KEY, DEFAULT_PREFETCH_ON_OPEN) ||<a name="line.187"></a>
+<span class="sourceLineNo">188</span>        (family == null ? false : family.isPrefetchBlocksOnOpen());<a name="line.188"></a>
+<span class="sourceLineNo">189</span>    this.cacheCompactedDataOnWrite = conf.getBoolean(CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY,<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      DEFAULT_CACHE_COMPACTED_BLOCKS_ON_WRITE);<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    this.blockCache = blockCache;<a name="line.191"></a>
+<span class="sourceLineNo">192</span>    this.byteBuffAllocator = byteBuffAllocator;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    LOG.info("Created cacheConfig: " + this + (family == null ? "" : " for family " + family) +<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        " with blockCache=" + blockCache);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>  }<a name="line.195"></a>
+<span class="sourceLineNo">196</span><a name="line.196"></a>
+<span class="sourceLineNo">197</span>  /**<a name="line.197"></a>
+<span class="sourceLineNo">198</span>   * Constructs a cache configuration copied from the specified configuration.<a name="line.198"></a>
+<span class="sourceLineNo">199</span>   * @param cacheConf<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   */<a name="line.200"></a>
+<span class="sourceLineNo">201</span>  public CacheConfig(CacheConfig cacheConf) {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>    this.cacheDataOnRead = cacheConf.cacheDataOnRead;<a name="line.202"></a>
+<span class="sourceLineNo">203</span>    this.inMemory = cacheConf.inMemory;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    this.cacheDataOnWrite = cacheConf.cacheDataOnWrite;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>    this.cacheIndexesOnWrite = cacheConf.cacheIndexesOnWrite;<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    this.cacheBloomsOnWrite = cacheConf.cacheBloomsOnWrite;<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    this.evictOnClose = cacheConf.evictOnClose;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    this.cacheDataCompressed = cacheConf.cacheDataCompressed;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    this.prefetchOnOpen = cacheConf.prefetchOnOpen;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    this.cacheCompactedDataOnWrite = cacheConf.cacheCompactedDataOnWrite;<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    this.dropBehindCompaction = cacheConf.dropBehindCompaction;<a name="line.211"></a>
+<span class="sourceLineNo">212</span>    this.blockCache = cacheConf.blockCache;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    this.byteBuffAllocator = cacheConf.byteBuffAllocator;<a name="line.213"></a>
+<span class="sourceLineNo">214</span>  }<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>  private CacheConfig() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    this.cacheDataOnRead = false;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    this.inMemory = false;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    this.cacheDataOnWrite = false;<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    this.cacheIndexesOnWrite = false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    this.cacheBloomsOnWrite = false;<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    this.evictOnClose = false;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    this.cacheDataCompressed = false;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    this.prefetchOnOpen = false;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    this.cacheCompactedDataOnWrite = false;<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    this.dropBehindCompaction = false;<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    this.blockCache = null;<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    this.byteBuffAllocator = ByteBuffAllocator.HEAP;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>  }<a name="line.229"></a>
+<span class="sourceLineNo">230</span><a name="line.230"></a>
+<span class="sourceLineNo">231</span>  /**<a name="line.231"></a>
+<span class="sourceLineNo">232</span>   * Returns whether the DATA blocks of this HFile should be cached on read or not (we always<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * cache the meta blocks, the INDEX and BLOOM blocks).<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * @return true if blocks should be cached on read, false if not<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   */<a name="line.235"></a>
+<span class="sourceLineNo">236</span>  public boolean shouldCacheDataOnRead() {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    return cacheDataOnRead;<a name="line.237"></a>
+<span class="sourceLineNo">238</span>  }<a name="line.238"></a>
+<span class="sourceLineNo">239</span><a name="line.239"></a>
+<span class="sourceLineNo">240</span>  public boolean shouldDropBehindCompaction() {<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    return dropBehindCompaction;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  }<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>  /**<a name="line.244"></a>
+<span class="sourceLineNo">245</span>   * Should we cache a block of a particular category? We always cache<a name="line.245"></a>
+<span class="sourceLineNo">246</span>   * important blocks such as index blocks, as long as the block cache is<a name="line.246"></a>
+<span class="sourceLineNo">247</span>   * available.<a name="line.247"></a>
 <span class="sourceLineNo">248</span>   */<a name="line.248"></a>
-<span class="sourceLineNo">249</span>  public boolean shouldCacheDataOnWrite() {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    return this.cacheDataOnWrite;<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>  /**<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   * @param cacheDataOnWrite whether data blocks should be written to the cache<a name="line.254"></a>
-<span class="sourceLineNo">255</span>   *                         when an HFile is written<a name="line.255"></a>
+<span class="sourceLineNo">249</span>  public boolean shouldCacheBlockOnRead(BlockCategory category) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    return cacheDataOnRead || category == BlockCategory.INDEX || category == BlockCategory.BLOOM ||<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        (prefetchOnOpen &amp;&amp; (category != BlockCategory.META &amp;&amp; category != BlockCategory.UNKNOWN));<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  }<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * @return true if blocks in this file should be flagged as in-memory<a name="line.255"></a>
 <span class="sourceLineNo">256</span>   */<a name="line.256"></a>
-<span class="sourceLineNo">257</span>  @VisibleForTesting<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  public void setCacheDataOnWrite(boolean cacheDataOnWrite) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    this.cacheDataOnWrite = cacheDataOnWrite;<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  }<a name="line.260"></a>
-<span class="sourceLineNo">261</span><a name="line.261"></a>
-<span class="sourceLineNo">262</span>  /**<a name="line.262"></a>
-<span class="sourceLineNo">263</span>   * @return true if index blocks should be written to the cache when an HFile<a name="line.263"></a>
-<span class="sourceLineNo">264</span>   *         is written, false if not<a name="line.264"></a>
-<span class="sourceLineNo">265</span>   */<a name="line.265"></a>
-<span class="sourceLineNo">266</span>  public boolean shouldCacheIndexesOnWrite() {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    return this.cacheIndexesOnWrite;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>  }<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>  /**<a name="line.270"></a>
-<span class="sourceLineNo">271</span>   * @return true if bloom blocks should be written to the cache when an HFile<a name="line.271"></a>
-<span class="sourceLineNo">272</span>   *         is written, false if not<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  public boolean shouldCacheBloomsOnWrite() {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    return this.cacheBloomsOnWrite;<a name="line.275"></a>
+<span class="sourceLineNo">257</span>  public boolean isInMemory() {<a name="line.257"></a>
+<span class="sourceLineNo">258</span>    return this.inMemory;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  }<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
+<span class="sourceLineNo">261</span>  /**<a name="line.261"></a>
+<span class="sourceLineNo">262</span>   * @return true if data blocks should be written to the cache when an HFile is<a name="line.262"></a>
+<span class="sourceLineNo">263</span>   *         written, false if not<a name="line.263"></a>
+<span class="sourceLineNo">264</span>   */<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  public boolean shouldCacheDataOnWrite() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return this.cacheDataOnWrite;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * @param cacheDataOnWrite whether data blocks should be written to the cache<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   *                         when an HFile is written<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   */<a name="line.272"></a>
+<span class="sourceLineNo">273</span>  @VisibleForTesting<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  public void setCacheDataOnWrite(boolean cacheDataOnWrite) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>    this.cacheDataOnWrite = cacheDataOnWrite;<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>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * @return true if blocks should be evicted from the cache when an HFile<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   *         reader is closed, false if not<a name="line.280"></a>
+<span class="sourceLineNo">279</span>   * @return true if index blocks should be written to the cache when an HFile<a name="line.279"></a>
+<span class="sourceLineNo">280</span>   *         is written, false if not<a name="line.280"></a>
 <span class="sourceLineNo">281</span>   */<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  public boolean shouldEvictOnClose() {<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    return this.evictOnClose;<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  public boolean shouldCacheIndexesOnWrite() {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return this.cacheIndexesOnWrite;<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  }<a name="line.284"></a>
 <span class="sourceLineNo">285</span><a name="line.285"></a>
 <span class="sourceLineNo">286</span>  /**<a name="line.286"></a>
-<span class="sourceLineNo">287</span>   * Only used for testing.<a name="line.287"></a>
-<span class="sourceLineNo">288</span>   * @param evictOnClose whether blocks should be evicted from the cache when an<a name="line.288"></a>
-<span class="sourceLineNo">289</span>   *                     HFile reader is closed<a name="line.289"></a>
-<span class="sourceLineNo">290</span>   */<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  @VisibleForTesting<a name="line.291"></a>
-<span class="sourceLineNo">292</span>  public void setEvictOnClose(boolean evictOnClose) {<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    this.evictOnClose = evictOnClose;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  }<a name="line.294"></a>
-<span class="sourceLineNo">295</span><a name="line.295"></a>
-<span class="sourceLineNo">296</span>  /**<a name="line.296"></a>
-<span class="sourceLineNo">297</span>   * @return true if data blocks should be compressed in the cache, false if not<a name="line.297"></a>
-<span class="sourceLineNo">298</span>   */<a name="line.298"></a>
-<span class="sourceLineNo">299</span>  public boolean shouldCacheDataCompressed() {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    return this.cacheDataOnRead &amp;&amp; this.cacheDataCompressed;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
-<span class="sourceLineNo">302</span><a name="line.302"></a>
-<span class="sourceLineNo">303</span>  /**<a name="line.303"></a>
-<span class="sourceLineNo">304</span>   * @return true if this {@link BlockCategory} should be compressed in blockcache, false otherwise<a name="line.304"></a>
-<span class="sourceLineNo">305</span>   */<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public boolean shouldCacheCompressed(BlockCategory category) {<a name="line.306"></a>
-<span class="sourceLineNo">307</span>    switch (category) {<a name="line.307"></a>
-<span class="sourceLineNo">308</span>      case DATA:<a name="line.308"></a>
-<span class="sourceLineNo">309</span>        return this.cacheDataOnRead &amp;&amp; this.cacheDataCompressed;<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      default:<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        return false;<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
-<span class="sourceLineNo">314</span><a name="line.314"></a>
-<span class="sourceLineNo">315</span>  /**<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   * @return true if blocks should be prefetched into the cache on open, false if not<a name="line.316"></a>
-<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public boolean shouldPrefetchOnOpen() {<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    return this.prefetchOnOpen;<a name="line.319"></a>
-<span class="sourceLineNo">320</span>  }<a name="line.320"></a>
-<span class="sourceLineNo">321</span><a name="line.321"></a>
-<span class="sourceLineNo">322</span>  /**<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * Return true if we may find this type of block in block cache.<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * &lt;p&gt;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * TODO: today {@code family.isBlockCacheEnabled()} only means {@code cacheDataOnRead}, so here we<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * consider lots of other configurations such as {@code cacheDataOnWrite}. We should fix this in<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * the future, {@code cacheDataOnWrite} should honor the CF level {@code isBlockCacheEnabled}<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * configuration.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   */<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  public boolean shouldReadBlockFromCache(BlockType blockType) {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    if (cacheDataOnRead) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      return true;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    }<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    if (prefetchOnOpen) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      return true;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>    }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    if (cacheDataOnWrite) {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      return true;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    if (blockType == null) {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      return true;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>    if (blockType.getCategory() == BlockCategory.BLOOM ||<a name="line.343"></a>
-<span class="sourceLineNo">344</span>        blockType.getCategory() == BlockCategory.INDEX) {<a name="line.344"></a>
-<span class="sourceLineNo">345</span>      return true;<a name="line.345"></a>
-<span class="sourceLineNo">346</span>    }<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    return false;<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  }<a name="line.348"></a>
-<span class="sourceLineNo">349</span><a name="line.349"></a>
-<span class="sourceLineNo">350</span>  /**<a name="line.350"></a>
-<span class="sourceLineNo">351</span>   * If we make sure the block could not be cached, we will not acquire the lock<a name="line.351"></a>
-<span class="sourceLineNo">352</span>   * otherwise we will acquire lock<a name="line.352"></a>
-<span class="sourceLineNo">353</span>   */<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  public boolean shouldLockOnCacheMiss(BlockType blockType) {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    if (blockType == null) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return true;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    return shouldCacheBlockOnRead(blockType.getCategory());<a name="line.358"></a>
-<span class="sourceLineNo">359</span>  }<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  /**<a name="line.361"></a>
-<span class="sourceLineNo">362</span>   * Returns the block cache.<a name="line.362"></a>
-<span class="sourceLineNo">363</span>   *<a name="line.363"></a>
-<span class="sourceLineNo">364</span>   * @return the block cache, or null if caching is completely disabled<a name="line.364"></a>
-<span class="sourceLineNo">365</span>   */<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    return Optional.ofNullable(this.blockCache);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  }<a name="line.368"></a>
-<span class="sourceLineNo">369</span><a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public boolean isCombinedBlockCache() {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    return blockCache instanceof CombinedBlockCache;<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>  public ByteBuffAllocator getByteBuffAllocator() {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>    return this.byteBuffAllocator;<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  }<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  @Override<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  public String toString() {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    return "cacheDataOnRead=" + shouldCacheDataOnRead() + ", cacheDataOnWrite="<a name="line.380"></a>
-<span class="sourceLineNo">381</span>        + shouldCacheDataOnWrite() + ", cacheIndexesOnWrite=" + shouldCacheIndexesOnWrite()<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        + ", cacheBloomsOnWrite=" + shouldCacheBloomsOnWrite() + ", cacheEvictOnClose="<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        + shouldEvictOnClose() + ", cacheDataCompressed=" + shouldCacheDataCompressed()<a name="line.383"></a>
-<span class="sourceLineNo">384</span>        + ", prefetchOnOpen=" + shouldPrefetchOnOpen();<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>}<a name="line.386"></a>
+<span class="sourceLineNo">287</span>   * @return true if bloom blocks should be written to the cache when an HFile<a name="line.287"></a>
+<span class="sourceLineNo">288</span>   *         is written, false if not<a name="line.288"></a>
+<span class="sourceLineNo">289</span>   */<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public boolean shouldCacheBloomsOnWrite() {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    return this.cacheBloomsOnWrite;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>  }<a name="line.292"></a>
+<span class="sourceLineNo">293</span><a name="line.293"></a>
+<span class="sourceLineNo">294</span>  /**<a name="line.294"></a>
+<span class="sourceLineNo">295</span>   * @return true if blocks should be evicted from the cache when an HFile<a name="line.295"></a>
+<span class="sourceLineNo">296</span>   *         reader is closed, false if not<a name="line.296"></a>
+<span class="sourceLineNo">297</span>   */<a name="line.297"></a>
+<span class="sourceLineNo">298</span>  public boolean shouldEvictOnClose() {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    return this.evictOnClose;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>  }<a name="line.300"></a>
+<span class="sourceLineNo">301</span><a name="line.301"></a>
+<span class="sourceLineNo">302</span>  /**<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * Only used for testing.<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   * @param evictOnClose whether blocks should be evicted from the cache when an<a name="line.304"></a>
+<span class="sourceLineNo">305</span>   *                     HFile reader is closed<a name="line.305"></a>
+<span class="sourceLineNo">306</span>   */<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  @VisibleForTesting<a name="line.307"></a>
+<span class="sourceLineNo">308</span>  public void setEvictOnClose(boolean evictOnClose) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    this.evictOnClose = evictOnClose;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>  /**<a name="line.312"></a>
+<span class="sourceLineNo">313</span>   * @return true if data blocks should be compressed in the cache, false if not<a name="line.313"></a>
+<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public boolean shouldCacheDataCompressed() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    return this.cacheDataOnRead &amp;&amp; this.cacheDataCompressed;<a name="line.316"></a>
+<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
+<span class="sourceLineNo">318</span><a name="line.318"></a>
+<span class="sourceLineNo">319</span>  /**<a name="line.319"></a>
+<span class="sourceLineNo">320</span>   * @return true if this {@link BlockCategory} should be compressed in blockcache, false otherwise<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
+<span class="sourceLineNo">322</span>  public boolean shouldCacheCompressed(BlockCategory category) {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    switch (category) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      case DATA:<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        return this.cacheDataOnRead &amp;&amp; this.cacheDataCompressed;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      default:<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        return false;<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    }<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  /**<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @return true if blocks should be prefetched into the cache on open, false if not<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  public boolean shouldPrefetchOnOpen() {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    return this.prefetchOnOpen;<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  }<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>  /**<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * @return true if blocks should be cached while writing during compaction, false if not<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   */<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  public boolean shouldCacheCompactedBlocksOnWrite() {<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    return this.cacheCompactedDataOnWrite;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * Return true if we may find this type of block in block cache.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * &lt;p&gt;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * TODO: today {@code family.isBlockCacheEnabled()} only means {@code cacheDataOnRead}, so here we<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   * consider lots of other configurations such as {@code cacheDataOnWrite}. We should fix this in<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * the future, {@code cacheDataOnWrite} should honor the CF level {@code isBlockCacheEnabled}<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * configuration.<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   */<a name="line.352"></a>
+<span class="sourceLineNo">353</span>  public boolean shouldReadBlockFromCache(BlockType blockType) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (cacheDataOnRead) {<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      return true;<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    if (prefetchOnOpen) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      return true;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>    }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    if (cacheDataOnWrite) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return true;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    if (blockType == null) {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      return true;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    if (blockType.getCategory() == BlockCategory.BLOOM ||<a name="line.366"></a>
+<span class="sourceLineNo">367</span>        blockType.getCategory() == BlockCategory.INDEX) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      return true;<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    return false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  }<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>   * If we make sure the block could not be cached, we will not acquire the lock<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * otherwise we will acquire lock<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  public boolean shouldLockOnCacheMiss(BlockType blockType) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    if (blockType == null) {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      return true;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    }<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    return shouldCacheBlockOnRead(blockType.getCategory());<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  }<a name="line.382"></a>
+<span class="sourceLineNo">383</span><a name="line.383"></a>
+<span class="sourceLineNo">384</span>  /**<a name="line.384"></a>
+<span class="sourceLineNo">385</span>   * Returns the block cache.<a name="line.385"></a>
+<span class="sourceLineNo">386</span>   *<a name="line.386"></a>
+<span class="sourceLineNo">387</span>   * @return the block cache, or null if caching is completely disabled<a name="line.387"></a>
+<span class="sourceLineNo">388</span>   */<a name="line.388"></a>
+<span class="sourceLineNo">389</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>    return Optional.ofNullable(this.blockCache);<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 boolean isCombinedBlockCache() {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    return blockCache instanceof CombinedBlockCache;<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 ByteBuffAllocator getByteBuffAllocator() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    return this.byteBuffAllocator;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  }<a name="line.399"></a>
+<span class="sourceLineNo">400</span><a name="line.400"></a>
+<span class="sourceLineNo">401</span>  @Override<a name="line.401"></a>
+<span class="sourceLineNo">402</span>  public String toString() {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    return "cacheDataOnRead=" + shouldCacheDataOnRead() + ", cacheDataOnWrite="<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        + shouldCacheDataOnWrite() + ", cacheIndexesOnWrite=" + shouldCacheIndexesOnWrite()<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        + ", cacheBloomsOnWrite=" + shouldCacheBloomsOnWrite() + ", cacheEvictOnClose="<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        + shouldEvictOnClose() + ", cacheDataCompressed=" + shouldCacheDataCompressed()<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        + ", prefetchOnOpen=" + shouldPrefetchOnOpen();<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>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
index 22d74f7..a40e4be 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.StoreFlusherImpl.html
@@ -1126,9 +1126,9 @@
 <span class="sourceLineNo">1118</span>      boolean shouldDropBehind) throws IOException {<a name="line.1118"></a>
 <span class="sourceLineNo">1119</span>    final CacheConfig writerCacheConf;<a name="line.1119"></a>
 <span class="sourceLineNo">1120</span>    if (isCompaction) {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      // Don't cache data on write on compactions.<a name="line.1121"></a>
+<span class="sourceLineNo">1121</span>      // Don't cache data on write on compactions, unless specifically configured to do so<a name="line.1121"></a>
 <span class="sourceLineNo">1122</span>      writerCacheConf = new CacheConfig(cacheConf);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>      writerCacheConf.setCacheDataOnWrite(false);<a name="line.1123"></a>
+<span class="sourceLineNo">1123</span>      writerCacheConf.setCacheDataOnWrite(cacheConf.shouldCacheCompactedBlocksOnWrite());<a name="line.1123"></a>
 <span class="sourceLineNo">1124</span>    } else {<a name="line.1124"></a>
 <span class="sourceLineNo">1125</span>      writerCacheConf = cacheConf;<a name="line.1125"></a>
 <span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
index 22d74f7..a40e4be 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HStore.html
@@ -1126,9 +1126,9 @@
 <span class="sourceLineNo">1118</span>      boolean shouldDropBehind) throws IOException {<a name="line.1118"></a>
 <span class="sourceLineNo">1119</span>    final CacheConfig writerCacheConf;<a name="line.1119"></a>
 <span class="sourceLineNo">1120</span>    if (isCompaction) {<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      // Don't cache data on write on compactions.<a name="line.1121"></a>
+<span class="sourceLineNo">1121</span>      // Don't cache data on write on compactions, unless specifically configured to do so<a name="line.1121"></a>
 <span class="sourceLineNo">1122</span>      writerCacheConf = new CacheConfig(cacheConf);<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>      writerCacheConf.setCacheDataOnWrite(false);<a name="line.1123"></a>
+<span class="sourceLineNo">1123</span>      writerCacheConf.setCacheDataOnWrite(cacheConf.shouldCacheCompactedBlocksOnWrite());<a name="line.1123"></a>
 <span class="sourceLineNo">1124</span>    } else {<a name="line.1124"></a>
 <span class="sourceLineNo">1125</span>      writerCacheConf = cacheConf;<a name="line.1125"></a>
 <span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
diff --git a/downloads.html b/downloads.html
index c2c9d7e..a92ab54 100644
--- a/downloads.html
+++ b/downloads.html
@@ -411,7 +411,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/export_control.html b/export_control.html
index 7ef0ad4..34a79cc 100644
--- a/export_control.html
+++ b/export_control.html
@@ -173,7 +173,7 @@ for more details.</p>
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/index.html b/index.html
index 3e84b0b..03167fd 100644
--- a/index.html
+++ b/index.html
@@ -251,7 +251,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/issue-tracking.html b/issue-tracking.html
index bf3f2ad..05c15e0 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -145,7 +145,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/mail-lists.html b/mail-lists.html
index 08e71ea..39b6939 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -198,7 +198,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/metrics.html b/metrics.html
index 1e77d3d..d8e9ed5 100644
--- a/metrics.html
+++ b/metrics.html
@@ -301,7 +301,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/old_news.html b/old_news.html
index 158fa07..8d05f16 100644
--- a/old_news.html
+++ b/old_news.html
@@ -292,7 +292,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugin-management.html b/plugin-management.html
index 2418965..31cb15c 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -297,7 +297,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugins.html b/plugins.html
index 7d925fd..a59bedc 100644
--- a/plugins.html
+++ b/plugins.html
@@ -224,7 +224,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 8f19156..756dd9f 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -611,7 +611,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-info.html b/project-info.html
index b2a2d7d..c55abf9 100644
--- a/project-info.html
+++ b/project-info.html
@@ -186,7 +186,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-reports.html b/project-reports.html
index c04d944..202f9f5 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -162,7 +162,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-summary.html b/project-summary.html
index 77ec8ef..a3b0365 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -188,7 +188,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 184bdcf..c899b08 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -150,7 +150,7 @@ Running Apache HBase (TM) in pseudo-distributed mode
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/replication.html b/replication.html
index 231fa3b..ef7e986 100644
--- a/replication.html
+++ b/replication.html
@@ -145,7 +145,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/resources.html b/resources.html
index 730c1b5..3bea73d 100644
--- a/resources.html
+++ b/resources.html
@@ -173,7 +173,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/source-repository.html b/source-repository.html
index 075d770..d481b3b 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -156,7 +156,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/sponsors.html b/sponsors.html
index 25a8165..ad8d411 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -175,7 +175,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/supportingprojects.html b/supportingprojects.html
index 724ff7f..c42fb09 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -362,7 +362,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/team-list.html b/team-list.html
index 5088972..c04201f 100644
--- a/team-list.html
+++ b/team-list.html
@@ -659,7 +659,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-14</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-12-16</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 1c2c661..0fa9ecd 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -51041,6 +51041,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html#testCacheUpdatedWhenLastModifiedOfSnapDirNotUpdated--">testCacheUpdatedWhenLastModifiedOfSnapDirNotUpdated()</a></span> - Method in class org.apache.hadoop.hbase.master.snapshot.<a href="org/apache/hadoop/hbase/master/snapshot/TestSnapshotFileCache.html" title="class in org.apache.hadoop.hbase.master.snapshot">TestSnapshotFileCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#testCachingDataBlocksDuringCompaction--">testCachingDataBlocksDuringCompaction()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheOnWrite</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#testCachingDataBlocksDuringCompactionInternals-boolean-boolean-">testCachingDataBlocksDuringCompactionInternals(boolean, boolean)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheOnWrite</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRegionLocationCaching.html#testCachingForHTableMultiPut--">testCachingForHTableMultiPut()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRegionLocationCaching.html" title="class in org.apache.hadoop.hbase.client">TestRegionLocationCaching</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestRegionLocationCaching.html#testCachingForHTableSinglePut--">testCachingForHTableSinglePut()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestRegionLocationCaching.html" title="class in org.apache.hadoop.hbase.client">TestRegionLocationCaching</a></dt>
@@ -61844,10 +61848,6 @@
 <div class="block">Test that the cohort member correctly doesn't attempt to start a task when the builder cannot
  correctly build a new task for the requested operation</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#testNotCachingDataBlocksDuringCompaction--">testNotCachingDataBlocksDuringCompaction()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheOnWrite</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#testNotCachingDataBlocksDuringCompactionInternals-boolean-">testNotCachingDataBlocksDuringCompactionInternals(boolean)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html" title="class in org.apache.hadoop.hbase.io.hfile">TestCacheOnWrite</a></dt>
-<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/TestNotCleanupCompactedFileWhenRegionWarmup.html" title="class in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestNotCleanupCompactedFileWhenRegionWarmup</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestNotCleanupCompactedFileWhenRegionWarmup.html#TestNotCleanupCompactedFileWhenRegionWarmup--">TestNotCleanupCompactedFileWhenRegionWarmup()</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestNotCleanupCompactedFileWhenRegionWarmup.html" title="class in org.apache.hadoop.hbase.regionserver">TestNotCleanupCompactedFileWhenRegionWarmup</a></dt>
@@ -69328,6 +69328,8 @@
 <dd>
 <div class="block">Test string encoding.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html#testStringCustomizedValues--">testStringCustomizedValues()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html" title="class in org.apache.hadoop.hbase.client">TestTableDescriptorBuilder</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestClasses.html#testStringify--">testStringify()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestClasses.html" title="class in org.apache.hadoop.hbase.util">TestClasses</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/TestOrderedBytes.html#testStringNoNullChars--">testStringNoNullChars()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/TestOrderedBytes.html" title="class in org.apache.hadoop.hbase.util">TestOrderedBytes</a></dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 81b1a51..05380a1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -150,8 +150,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestBackupDeleteWithFailures.Failure.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestBackupDeleteWithFailures.Failure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/TestIncrementalBackupMergeWithFailures.FailurePhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">TestIncrementalBackupMergeWithFailures.FailurePhase</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/chaos/actions/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/chaos/actions/package-tree.html
index c7a810b..35e469f 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/chaos/actions/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/chaos/actions/package-tree.html
@@ -163,8 +163,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.chaos.actions.<a href="../../../../../../org/apache/hadoop/hbase/chaos/actions/RollingBatchRestartRsAction.KillOrStart.html" title="enum in org.apache.hadoop.hbase.chaos.actions"><span class="typeNameLink">RollingBatchRestartRsAction.KillOrStart</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.chaos.actions.<a href="../../../../../../org/apache/hadoop/hbase/chaos/actions/RollingBatchSuspendResumeRsAction.SuspendOrResume.html" title="enum in org.apache.hadoop.hbase.chaos.actions"><span class="typeNameLink">RollingBatchSuspendResumeRsAction.SuspendOrResume</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.chaos.actions.<a href="../../../../../../org/apache/hadoop/hbase/chaos/actions/RollingBatchRestartRsAction.KillOrStart.html" title="enum in org.apache.hadoop.hbase.chaos.actions"><span class="typeNameLink">RollingBatchRestartRsAction.KillOrStart</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html
index eb80e02..179aa3b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -256,6 +256,10 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <div class="block">Test cps in the table description.</div>
 </td>
 </tr>
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html#testStringCustomizedValues--">testStringCustomizedValues</a></span>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -513,12 +517,21 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <a name="testPriority--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testPriority</h4>
 <pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html#line.307">testPriority</a>()</pre>
 </li>
 </ul>
+<a name="testStringCustomizedValues--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testStringCustomizedValues</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html#line.315">testStringCustomizedValues</a>()</pre>
+</li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html
index 02e2deb..30da82e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html
@@ -301,11 +301,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#testNotCachingDataBlocksDuringCompaction--">testNotCachingDataBlocksDuringCompaction</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#testCachingDataBlocksDuringCompaction--">testCachingDataBlocksDuringCompaction</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#testNotCachingDataBlocksDuringCompactionInternals-boolean-">testNotCachingDataBlocksDuringCompactionInternals</a></span>(boolean&nbsp;useTags)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#testCachingDataBlocksDuringCompactionInternals-boolean-boolean-">testCachingDataBlocksDuringCompactionInternals</a></span>(boolean&nbsp;useTags,
+                                              boolean&nbsp;cacheBlocksOnCompaction)</code>&nbsp;</td>
 </tr>
 <tr id="i10" class="altColor">
 <td class="colFirst"><code>void</code></td>
@@ -707,15 +708,16 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
-<a name="testNotCachingDataBlocksDuringCompactionInternals-boolean-">
+<a name="testCachingDataBlocksDuringCompactionInternals-boolean-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>testNotCachingDataBlocksDuringCompactionInternals</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#line.408">testNotCachingDataBlocksDuringCompactionInternals</a>(boolean&nbsp;useTags)
-                                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
-                                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
+<h4>testCachingDataBlocksDuringCompactionInternals</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#line.408">testCachingDataBlocksDuringCompactionInternals</a>(boolean&nbsp;useTags,
+                                                            boolean&nbsp;cacheBlocksOnCompaction)
+                                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
@@ -729,7 +731,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>testStoreFileCacheOnWrite</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#line.464">testStoreFileCacheOnWrite</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#line.489">testStoreFileCacheOnWrite</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -737,15 +739,15 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </dl>
 </li>
 </ul>
-<a name="testNotCachingDataBlocksDuringCompaction--">
+<a name="testCachingDataBlocksDuringCompaction--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>testNotCachingDataBlocksDuringCompaction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#line.470">testNotCachingDataBlocksDuringCompaction</a>()
-                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
-                                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
+<h4>testCachingDataBlocksDuringCompaction</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html#line.495">testCachingDataBlocksDuringCompaction</a>()
+                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
+                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index da85fc4..78ca0eb 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -594,15 +594,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
index 8e8d54b..b2cf5a6 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure/package-tree.html
@@ -81,14 +81,14 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Object</span></a>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
+<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
 </ul>
 </li>
-<li type="circle">org.apache.hadoop.hbase.procedure.Procedure (implements java.util.concurrent.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Callable.html?is-external=true" title="class or interface in java.util.concurrent">Callable</a>&lt;V&gt;, org.apache.hadoop.hbase.errorhandling.ForeignExceptionListener)
+<li type="circle">org.apache.hadoop.hbase.procedure2.Procedure&lt;TEnvironment&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedure.LatchedProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedure.LatchedProcedure</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure.<a href="../../../../../org/apache/hadoop/hbase/procedure/TestProcedureDescriber.TestProcedure.html" title="class in org.apache.hadoop.hbase.procedure"><span class="typeNameLink">TestProcedureDescriber.TestProcedure</span></a></li>
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.procedure.ProcedureManager
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 4f010dc..d90057e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -242,9 +242,9 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index c5a0d9a..4b736e9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -719,11 +719,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html
index cd8d22d..75dee8f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.html
@@ -318,7 +318,24 @@
 <span class="sourceLineNo">310</span>            .build();<a name="line.310"></a>
 <span class="sourceLineNo">311</span>    assertEquals(42, htd.getPriority());<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  }<a name="line.312"></a>
-<span class="sourceLineNo">313</span>}<a name="line.313"></a>
+<span class="sourceLineNo">313</span><a name="line.313"></a>
+<span class="sourceLineNo">314</span>  @Test<a name="line.314"></a>
+<span class="sourceLineNo">315</span>  public void testStringCustomizedValues() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    byte[] familyName = Bytes.toBytes("cf");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    ColumnFamilyDescriptor hcd = ColumnFamilyDescriptorBuilder.newBuilder(familyName)<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            .setBlocksize(1000)<a name="line.318"></a>
+<span class="sourceLineNo">319</span>            .build();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    TableDescriptor htd = TableDescriptorBuilder.newBuilder(TableName.valueOf(name.getMethodName()))<a name="line.320"></a>
+<span class="sourceLineNo">321</span>            .setColumnFamily(hcd)<a name="line.321"></a>
+<span class="sourceLineNo">322</span>            .setDurability(Durability.ASYNC_WAL)<a name="line.322"></a>
+<span class="sourceLineNo">323</span>            .build();<a name="line.323"></a>
+<span class="sourceLineNo">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>    assertEquals(<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      "'testStringCustomizedValues', " +<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        "{TABLE_ATTRIBUTES =&gt; {DURABILITY =&gt; 'ASYNC_WAL'}}, {NAME =&gt; 'cf', BLOCKSIZE =&gt; '1000'}",<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      htd.toStringCustomizedValues());<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  }<a name="line.329"></a>
+<span class="sourceLineNo">330</span>}<a name="line.330"></a>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html
index 9fc4814..8f07873 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.CacheOnWriteType.html
@@ -413,73 +413,98 @@
 <span class="sourceLineNo">405</span>    storeFilePath = sfw.getPath();<a name="line.405"></a>
 <span class="sourceLineNo">406</span>  }<a name="line.406"></a>
 <span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>  private void testNotCachingDataBlocksDuringCompactionInternals(boolean useTags)<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      throws IOException, InterruptedException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    // TODO: need to change this test if we add a cache size threshold for<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    // compactions, or if we implement some other kind of intelligent logic for<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    // deciding what blocks to cache-on-write on compaction.<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    final String table = "CompactionCacheOnWrite";<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    final String cf = "myCF";<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    final byte[] cfBytes = Bytes.toBytes(cf);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    final int maxVersions = 3;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    ColumnFamilyDescriptor cfd =<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        ColumnFamilyDescriptorBuilder.newBuilder(cfBytes).setCompressionType(compress)<a name="line.418"></a>
-<span class="sourceLineNo">419</span>            .setBloomFilterType(BLOOM_TYPE).setMaxVersions(maxVersions)<a name="line.419"></a>
-<span class="sourceLineNo">420</span>            .setDataBlockEncoding(NoOpDataBlockEncoder.INSTANCE.getDataBlockEncoding()).build();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    HRegion region = TEST_UTIL.createTestRegion(table, cfd, blockCache);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    int rowIdx = 0;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    long ts = EnvironmentEdgeManager.currentTime();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    for (int iFile = 0; iFile &lt; 5; ++iFile) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      for (int iRow = 0; iRow &lt; 500; ++iRow) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        String rowStr = "" + (rowIdx * rowIdx * rowIdx) + "row" + iFile + "_" +<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            iRow;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        Put p = new Put(Bytes.toBytes(rowStr));<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        ++rowIdx;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        for (int iCol = 0; iCol &lt; 10; ++iCol) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          String qualStr = "col" + iCol;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          String valueStr = "value_" + rowStr + "_" + qualStr;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          for (int iTS = 0; iTS &lt; 5; ++iTS) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            if (useTags) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>              Tag t = new ArrayBackedTag((byte) 1, "visibility");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>              Tag[] tags = new Tag[1];<a name="line.436"></a>
-<span class="sourceLineNo">437</span>              tags[0] = t;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>              KeyValue kv = new KeyValue(Bytes.toBytes(rowStr), cfBytes, Bytes.toBytes(qualStr),<a name="line.438"></a>
-<span class="sourceLineNo">439</span>                  HConstants.LATEST_TIMESTAMP, Bytes.toBytes(valueStr), tags);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>              p.add(kv);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>            } else {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>              p.addColumn(cfBytes, Bytes.toBytes(qualStr), ts++, Bytes.toBytes(valueStr));<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        p.setDurability(Durability.ASYNC_WAL);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        region.put(p);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      region.flush(true);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    clearBlockCache(blockCache);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    assertEquals(0, blockCache.getBlockCount());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    region.compact(false);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    LOG.debug("compactStores() returned");<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>    for (CachedBlock block: blockCache) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      assertNotEquals(BlockType.ENCODED_DATA, block.getBlockType());<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      assertNotEquals(BlockType.DATA, block.getBlockType());<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    region.close();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>  }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  @Test<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  public void testStoreFileCacheOnWrite() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    testStoreFileCacheOnWriteInternals(false);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    testStoreFileCacheOnWriteInternals(true);<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>  @Test<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  public void testNotCachingDataBlocksDuringCompaction() throws IOException, InterruptedException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    testNotCachingDataBlocksDuringCompactionInternals(false);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    testNotCachingDataBlocksDuringCompactionInternals(true);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>}<a name="line.474"></a>
+<span class="sourceLineNo">408</span>  private void testCachingDataBlocksDuringCompactionInternals(boolean useTags,<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      boolean cacheBlocksOnCompaction) throws IOException, InterruptedException {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    // create a localConf<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    boolean localValue = conf.getBoolean(CacheConfig.CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY,<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      false);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    try {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      // Set the conf if testing caching compacted blocks on write<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      conf.setBoolean(CacheConfig.CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY,<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        cacheBlocksOnCompaction);<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>      // TODO: need to change this test if we add a cache size threshold for<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      // compactions, or if we implement some other kind of intelligent logic for<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      // deciding what blocks to cache-on-write on compaction.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      final String table = "CompactionCacheOnWrite";<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      final String cf = "myCF";<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      final byte[] cfBytes = Bytes.toBytes(cf);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      final int maxVersions = 3;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      ColumnFamilyDescriptor cfd = ColumnFamilyDescriptorBuilder.newBuilder(cfBytes)<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          .setCompressionType(compress).setBloomFilterType(BLOOM_TYPE).setMaxVersions(maxVersions)<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          .setDataBlockEncoding(NoOpDataBlockEncoder.INSTANCE.getDataBlockEncoding()).build();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      HRegion region = TEST_UTIL.createTestRegion(table, cfd, blockCache);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      int rowIdx = 0;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      long ts = EnvironmentEdgeManager.currentTime();<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      for (int iFile = 0; iFile &lt; 5; ++iFile) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        for (int iRow = 0; iRow &lt; 500; ++iRow) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          String rowStr = "" + (rowIdx * rowIdx * rowIdx) + "row" + iFile + "_" + iRow;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          Put p = new Put(Bytes.toBytes(rowStr));<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          ++rowIdx;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          for (int iCol = 0; iCol &lt; 10; ++iCol) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>            String qualStr = "col" + iCol;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>            String valueStr = "value_" + rowStr + "_" + qualStr;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>            for (int iTS = 0; iTS &lt; 5; ++iTS) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>              if (useTags) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>                Tag t = new ArrayBackedTag((byte) 1, "visibility");<a name="line.441"></a>
+<span class="sourceLineNo">442</span>                Tag[] tags = new Tag[1];<a name="line.442"></a>
+<span class="sourceLineNo">443</span>                tags[0] = t;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>                KeyValue kv = new KeyValue(Bytes.toBytes(rowStr), cfBytes, Bytes.toBytes(qualStr),<a name="line.444"></a>
+<span class="sourceLineNo">445</span>                    HConstants.LATEST_TIMESTAMP, Bytes.toBytes(valueStr), tags);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>                p.add(kv);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              } else {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>                p.addColumn(cfBytes, Bytes.toBytes(qualStr), ts++, Bytes.toBytes(valueStr));<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              }<a name="line.449"></a>
+<span class="sourceLineNo">450</span>            }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>          }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          p.setDurability(Durability.ASYNC_WAL);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          region.put(p);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        region.flush(true);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      }<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>      clearBlockCache(blockCache);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      assertEquals(0, blockCache.getBlockCount());<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>      region.compact(false);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      LOG.debug("compactStores() returned");<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>      boolean dataBlockCached = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      for (CachedBlock block : blockCache) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>        if (BlockType.ENCODED_DATA.equals(block.getBlockType())<a name="line.466"></a>
+<span class="sourceLineNo">467</span>            || BlockType.DATA.equals(block.getBlockType())) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          dataBlockCached = true;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>          break;<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      }<a name="line.471"></a>
+<span class="sourceLineNo">472</span><a name="line.472"></a>
+<span class="sourceLineNo">473</span>      // Data blocks should be cached in instances where we are caching blocks on write. In the case<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      // of testing<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      // BucketCache, we cannot verify block type as it is not stored in the cache.<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      assertTrue(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "\nTest description: " + testDescription + "\ncacheBlocksOnCompaction: "<a name="line.477"></a>
+<span class="sourceLineNo">478</span>            + cacheBlocksOnCompaction + "\n",<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        (cacheBlocksOnCompaction &amp;&amp; !(blockCache instanceof BucketCache)) == dataBlockCached);<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>      region.close();<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    } finally {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      // reset back<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      conf.setBoolean(CacheConfig.CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY, localValue);<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>  @Test<a name="line.488"></a>
+<span class="sourceLineNo">489</span>  public void testStoreFileCacheOnWrite() throws IOException {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    testStoreFileCacheOnWriteInternals(false);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    testStoreFileCacheOnWriteInternals(true);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>  }<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>  @Test<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  public void testCachingDataBlocksDuringCompaction() throws IOException, InterruptedException {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    testCachingDataBlocksDuringCompactionInternals(false, false);<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    testCachingDataBlocksDuringCompactionInternals(true, true);<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>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html
index 9fc4814..8f07873 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/io/hfile/TestCacheOnWrite.html
@@ -413,73 +413,98 @@
 <span class="sourceLineNo">405</span>    storeFilePath = sfw.getPath();<a name="line.405"></a>
 <span class="sourceLineNo">406</span>  }<a name="line.406"></a>
 <span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>  private void testNotCachingDataBlocksDuringCompactionInternals(boolean useTags)<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      throws IOException, InterruptedException {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    // TODO: need to change this test if we add a cache size threshold for<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    // compactions, or if we implement some other kind of intelligent logic for<a name="line.411"></a>
-<span class="sourceLineNo">412</span>    // deciding what blocks to cache-on-write on compaction.<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    final String table = "CompactionCacheOnWrite";<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    final String cf = "myCF";<a name="line.414"></a>
-<span class="sourceLineNo">415</span>    final byte[] cfBytes = Bytes.toBytes(cf);<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    final int maxVersions = 3;<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    ColumnFamilyDescriptor cfd =<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        ColumnFamilyDescriptorBuilder.newBuilder(cfBytes).setCompressionType(compress)<a name="line.418"></a>
-<span class="sourceLineNo">419</span>            .setBloomFilterType(BLOOM_TYPE).setMaxVersions(maxVersions)<a name="line.419"></a>
-<span class="sourceLineNo">420</span>            .setDataBlockEncoding(NoOpDataBlockEncoder.INSTANCE.getDataBlockEncoding()).build();<a name="line.420"></a>
-<span class="sourceLineNo">421</span>    HRegion region = TEST_UTIL.createTestRegion(table, cfd, blockCache);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>    int rowIdx = 0;<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    long ts = EnvironmentEdgeManager.currentTime();<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    for (int iFile = 0; iFile &lt; 5; ++iFile) {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>      for (int iRow = 0; iRow &lt; 500; ++iRow) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>        String rowStr = "" + (rowIdx * rowIdx * rowIdx) + "row" + iFile + "_" +<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            iRow;<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        Put p = new Put(Bytes.toBytes(rowStr));<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        ++rowIdx;<a name="line.429"></a>
-<span class="sourceLineNo">430</span>        for (int iCol = 0; iCol &lt; 10; ++iCol) {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>          String qualStr = "col" + iCol;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          String valueStr = "value_" + rowStr + "_" + qualStr;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          for (int iTS = 0; iTS &lt; 5; ++iTS) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            if (useTags) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>              Tag t = new ArrayBackedTag((byte) 1, "visibility");<a name="line.435"></a>
-<span class="sourceLineNo">436</span>              Tag[] tags = new Tag[1];<a name="line.436"></a>
-<span class="sourceLineNo">437</span>              tags[0] = t;<a name="line.437"></a>
-<span class="sourceLineNo">438</span>              KeyValue kv = new KeyValue(Bytes.toBytes(rowStr), cfBytes, Bytes.toBytes(qualStr),<a name="line.438"></a>
-<span class="sourceLineNo">439</span>                  HConstants.LATEST_TIMESTAMP, Bytes.toBytes(valueStr), tags);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>              p.add(kv);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>            } else {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>              p.addColumn(cfBytes, Bytes.toBytes(qualStr), ts++, Bytes.toBytes(valueStr));<a name="line.442"></a>
-<span class="sourceLineNo">443</span>            }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>          }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>        }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        p.setDurability(Durability.ASYNC_WAL);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        region.put(p);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>      region.flush(true);<a name="line.449"></a>
-<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    clearBlockCache(blockCache);<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    assertEquals(0, blockCache.getBlockCount());<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    region.compact(false);<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    LOG.debug("compactStores() returned");<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>    for (CachedBlock block: blockCache) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      assertNotEquals(BlockType.ENCODED_DATA, block.getBlockType());<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      assertNotEquals(BlockType.DATA, block.getBlockType());<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    region.close();<a name="line.460"></a>
-<span class="sourceLineNo">461</span>  }<a name="line.461"></a>
-<span class="sourceLineNo">462</span><a name="line.462"></a>
-<span class="sourceLineNo">463</span>  @Test<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  public void testStoreFileCacheOnWrite() throws IOException {<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    testStoreFileCacheOnWriteInternals(false);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    testStoreFileCacheOnWriteInternals(true);<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>  @Test<a name="line.469"></a>
-<span class="sourceLineNo">470</span>  public void testNotCachingDataBlocksDuringCompaction() throws IOException, InterruptedException {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    testNotCachingDataBlocksDuringCompactionInternals(false);<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    testNotCachingDataBlocksDuringCompactionInternals(true);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  }<a name="line.473"></a>
-<span class="sourceLineNo">474</span>}<a name="line.474"></a>
+<span class="sourceLineNo">408</span>  private void testCachingDataBlocksDuringCompactionInternals(boolean useTags,<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      boolean cacheBlocksOnCompaction) throws IOException, InterruptedException {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    // create a localConf<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    boolean localValue = conf.getBoolean(CacheConfig.CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY,<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      false);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    try {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      // Set the conf if testing caching compacted blocks on write<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      conf.setBoolean(CacheConfig.CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY,<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        cacheBlocksOnCompaction);<a name="line.416"></a>
+<span class="sourceLineNo">417</span><a name="line.417"></a>
+<span class="sourceLineNo">418</span>      // TODO: need to change this test if we add a cache size threshold for<a name="line.418"></a>
+<span class="sourceLineNo">419</span>      // compactions, or if we implement some other kind of intelligent logic for<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      // deciding what blocks to cache-on-write on compaction.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      final String table = "CompactionCacheOnWrite";<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      final String cf = "myCF";<a name="line.422"></a>
+<span class="sourceLineNo">423</span>      final byte[] cfBytes = Bytes.toBytes(cf);<a name="line.423"></a>
+<span class="sourceLineNo">424</span>      final int maxVersions = 3;<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      ColumnFamilyDescriptor cfd = ColumnFamilyDescriptorBuilder.newBuilder(cfBytes)<a name="line.425"></a>
+<span class="sourceLineNo">426</span>          .setCompressionType(compress).setBloomFilterType(BLOOM_TYPE).setMaxVersions(maxVersions)<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          .setDataBlockEncoding(NoOpDataBlockEncoder.INSTANCE.getDataBlockEncoding()).build();<a name="line.427"></a>
+<span class="sourceLineNo">428</span>      HRegion region = TEST_UTIL.createTestRegion(table, cfd, blockCache);<a name="line.428"></a>
+<span class="sourceLineNo">429</span>      int rowIdx = 0;<a name="line.429"></a>
+<span class="sourceLineNo">430</span>      long ts = EnvironmentEdgeManager.currentTime();<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      for (int iFile = 0; iFile &lt; 5; ++iFile) {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>        for (int iRow = 0; iRow &lt; 500; ++iRow) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          String rowStr = "" + (rowIdx * rowIdx * rowIdx) + "row" + iFile + "_" + iRow;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          Put p = new Put(Bytes.toBytes(rowStr));<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          ++rowIdx;<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          for (int iCol = 0; iCol &lt; 10; ++iCol) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>            String qualStr = "col" + iCol;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>            String valueStr = "value_" + rowStr + "_" + qualStr;<a name="line.438"></a>
+<span class="sourceLineNo">439</span>            for (int iTS = 0; iTS &lt; 5; ++iTS) {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>              if (useTags) {<a name="line.440"></a>
+<span class="sourceLineNo">441</span>                Tag t = new ArrayBackedTag((byte) 1, "visibility");<a name="line.441"></a>
+<span class="sourceLineNo">442</span>                Tag[] tags = new Tag[1];<a name="line.442"></a>
+<span class="sourceLineNo">443</span>                tags[0] = t;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>                KeyValue kv = new KeyValue(Bytes.toBytes(rowStr), cfBytes, Bytes.toBytes(qualStr),<a name="line.444"></a>
+<span class="sourceLineNo">445</span>                    HConstants.LATEST_TIMESTAMP, Bytes.toBytes(valueStr), tags);<a name="line.445"></a>
+<span class="sourceLineNo">446</span>                p.add(kv);<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              } else {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>                p.addColumn(cfBytes, Bytes.toBytes(qualStr), ts++, Bytes.toBytes(valueStr));<a name="line.448"></a>
+<span class="sourceLineNo">449</span>              }<a name="line.449"></a>
+<span class="sourceLineNo">450</span>            }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>          }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>          p.setDurability(Durability.ASYNC_WAL);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>          region.put(p);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        }<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        region.flush(true);<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      }<a name="line.456"></a>
+<span class="sourceLineNo">457</span><a name="line.457"></a>
+<span class="sourceLineNo">458</span>      clearBlockCache(blockCache);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      assertEquals(0, blockCache.getBlockCount());<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>      region.compact(false);<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      LOG.debug("compactStores() returned");<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>      boolean dataBlockCached = false;<a name="line.464"></a>
+<span class="sourceLineNo">465</span>      for (CachedBlock block : blockCache) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>        if (BlockType.ENCODED_DATA.equals(block.getBlockType())<a name="line.466"></a>
+<span class="sourceLineNo">467</span>            || BlockType.DATA.equals(block.getBlockType())) {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>          dataBlockCached = true;<a name="line.468"></a>
+<span class="sourceLineNo">469</span>          break;<a name="line.469"></a>
+<span class="sourceLineNo">470</span>        }<a name="line.470"></a>
+<span class="sourceLineNo">471</span>      }<a name="line.471"></a>
+<span class="sourceLineNo">472</span><a name="line.472"></a>
+<span class="sourceLineNo">473</span>      // Data blocks should be cached in instances where we are caching blocks on write. In the case<a name="line.473"></a>
+<span class="sourceLineNo">474</span>      // of testing<a name="line.474"></a>
+<span class="sourceLineNo">475</span>      // BucketCache, we cannot verify block type as it is not stored in the cache.<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      assertTrue(<a name="line.476"></a>
+<span class="sourceLineNo">477</span>        "\nTest description: " + testDescription + "\ncacheBlocksOnCompaction: "<a name="line.477"></a>
+<span class="sourceLineNo">478</span>            + cacheBlocksOnCompaction + "\n",<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        (cacheBlocksOnCompaction &amp;&amp; !(blockCache instanceof BucketCache)) == dataBlockCached);<a name="line.479"></a>
+<span class="sourceLineNo">480</span><a name="line.480"></a>
+<span class="sourceLineNo">481</span>      region.close();<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    } finally {<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      // reset back<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      conf.setBoolean(CacheConfig.CACHE_COMPACTED_BLOCKS_ON_WRITE_KEY, localValue);<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    }<a name="line.485"></a>
+<span class="sourceLineNo">486</span>  }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>  @Test<a name="line.488"></a>
+<span class="sourceLineNo">489</span>  public void testStoreFileCacheOnWrite() throws IOException {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>    testStoreFileCacheOnWriteInternals(false);<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    testStoreFileCacheOnWriteInternals(true);<a name="line.491"></a>
+<span class="sourceLineNo">492</span>  }<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>  @Test<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  public void testCachingDataBlocksDuringCompaction() throws IOException, InterruptedException {<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    testCachingDataBlocksDuringCompactionInternals(false, false);<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    testCachingDataBlocksDuringCompactionInternals(true, true);<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>